/* * * Copyright 2002 Sun Microsystems, Inc. All Rights Reserved. * * Redistribution and use in source and binary forms, with or * without modification, are permitted provided that the following * conditions are met: * * - Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * - Redistribution in binary form must reproduce the above * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials * provided with the distribution. * * Neither the name of Sun Microsystems, Inc. or the names of * contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * This software is provided "AS IS," without a warranty of any * kind. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY * EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY * DAMAGES OR LIABILITIES SUFFERED BY LICENSEE AS A RESULT OF OR * RELATING TO USE, MODIFICATION OR DISTRIBUTION OF THIS SOFTWARE OR * ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE * FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, * SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF * THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF SUN HAS * BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. * * You acknowledge that this software is not designed, licensed or * intended for use in the design, construction, operation or * maintenance of any nuclear facility. * */ import java.io.FileInputStream; import java.io.IOException; import java.math.BigDecimal; import java.math.BigInteger; import java.util.List; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; import javax.xml.bind.UnmarshalException; import javax.xml.bind.Unmarshaller; import javax.xml.bind.ValidationEvent; import javax.xml.bind.ValidationException; import javax.xml.bind.Validator; import javax.xml.bind.util.ValidationEventCollector; // import java content classes generated by binding compiler import primer.po.*; /* * $Id: Main.java,v 1.3 2002/09/25 22:22:49 ryans Exp $ * * Copyright 2002 Sun Microsystems, Inc. All Rights Reserved. * * This software is the proprietary information of Sun Microsystems, Inc. * Use is subject to license terms. * */ public class Main { // This sample application demonstrates how to validate a Java content // tree at runtime. public static void main( String[] args ) { try { // create a JAXBContext capable of handling classes generated into // the primer.po package JAXBContext jc = JAXBContext.newInstance( "primer.po" ); // create an Unmarshaller Unmarshaller u = jc.createUnmarshaller(); // in this example, we will allow the Validator's default // ValidationEventHandler to receive notification of warnings // and errors which will be sent to System.out. The default // ValidationEventHandler will cause the validateRoot operation // to fail with an ValidationException after encountering the // first error or fatal error. // unmarshal a valid po instance document into a tree of Java // content objects composed of classes from the primer.po package. PurchaseOrder po = (PurchaseOrder)u.unmarshal( new FileInputStream( "po.xml" ) ); // get a reference to the first item in the po Items items = po.getItems(); List itemTypeList = items.getItem(); Items.ItemType item = (Items.ItemType)itemTypeList.get( 0 ); // invalidate it by setting some bogus data item.setQuantity( new BigInteger( "-5" ) ); // create a Validator Validator v = jc.createValidator(); // validate the content tree boolean valid = v.validateRoot( po ); System.out.println( valid ); } catch( ValidationException ue ) { System.out.println( "Caught ValidationException" ); } catch( JAXBException je ) { je.printStackTrace(); } catch( IOException ioe ) { ioe.printStackTrace(); } } }