1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
/* * Copyright 2003 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */ package javax.xml.bind.helpers; import org.w3c.dom.Node; import javax.xml.bind.ValidationEvent; import javax.xml.bind.ValidationEventHandler; import javax.xml.bind.ValidationEventLocator; import java.net.URL; /** * <p> * JAXB 1.0 only default validation event handler. This is the default * handler for all objects created from a JAXBContext that is managing * schema-derived code generated by a JAXB 1.0 binding compiler. * * <p> * This handler causes the unmarshal and validate operations to fail on the first * error or fatal error. * * <p> * This handler is not the default handler for JAXB mapped classes following * JAXB 2.0 or later versions. Default validation event handling has changed * and is specified in {@link javax.xml.bind.Unmarshaller} and * {@link javax.xml.bind.Marshaller}. * * @author <ul><li>Ryan Shoemaker, Sun Microsystems, Inc.</li></ul> * @version $Revision: 1.4 $ * @see javax.xml.bind.Unmarshaller * @see javax.xml.bind.Validator * @see javax.xml.bind.ValidationEventHandler * @since JAXB1.0 */ public class DefaultValidationEventHandler implements ValidationEventHandler { public boolean handleEvent( ValidationEvent event ) { if( event == null ) { throw new IllegalArgumentException(); } // calculate the severity prefix and return value String severity = null; boolean retVal = false; switch ( event.getSeverity() ) { case ValidationEvent.WARNING: severity = Messages.format( Messages.WARNING ); retVal = true; // continue after warnings break; case ValidationEvent.ERROR: severity = Messages.format( Messages.ERROR ); retVal = false; // terminate after errors break; case ValidationEvent.FATAL_ERROR: severity = Messages.format( Messages.FATAL_ERROR ); retVal = false; // terminate after fatal errors break; default: assert false : Messages.format( Messages.UNRECOGNIZED_SEVERITY, event.getSeverity() ); } // calculate the location message String location = getLocation( event ); System.out.println( Messages.format( Messages.SEVERITY_MESSAGE, severity, event.getMessage(), location ) ); // fail on the first error or fatal error return retVal; } /** * Calculate a location message for the event * */ private String getLocation(ValidationEvent event) { StringBuffer msg = new StringBuffer(); ValidationEventLocator locator = event.getLocator(); if( locator != null ) { URL url = locator.getURL(); Object obj = locator.getObject(); Node node = locator.getNode(); int line = locator.getLineNumber(); if( url!=null || line!=-1 ) { msg.append( "line " + line ); if( url!=null ) msg.append( " of " + url ); } else if( obj != null ) { msg.append( " obj: " + obj.toString() ); } else if( node != null ) { msg.append( " node: " + node.toString() ); } } else { msg.append( Messages.format( Messages.LOCATION_UNAVAILABLE ) ); } return msg.toString(); } }