001 // 002 // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v1.0.1-05/30/2003 05:06 AM(java_re)-fcs 003 // See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 004 // Any modifications to this file will be lost upon recompilation of the source schema. 005 // Generated on: 2004.10.11 at 12:13:34 EDT 006 // 007 008 /* 009 * Copyright 2003 Sun Microsystems, Inc. All rights reserved. 010 * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. 011 */ 012 013 /* 014 * @(#)$Id: ValidatingUnmarshaller.java,v 1.5 2003/05/14 18:36:19 lschwenk Exp $ 015 */ 016 package astronomy.data.spectra.impl.runtime; 017 018 import javax.xml.bind.JAXBException; 019 import javax.xml.bind.ValidationEvent; 020 021 import org.iso_relax.verifier.impl.ForkContentHandler; 022 import org.xml.sax.Attributes; 023 import org.xml.sax.SAXException; 024 import org.xml.sax.helpers.AttributesImpl; 025 026 import com.sun.msv.grammar.Grammar; 027 import com.sun.msv.verifier.Verifier; 028 import com.sun.msv.verifier.VerifierFilter; 029 import com.sun.msv.verifier.regexp.REDocumentDeclaration; 030 import com.sun.xml.bind.validator.Locator; 031 032 /** 033 * Filter implementation of SAXUnmarshallerHandler. 034 * 035 * <p> 036 * This component internally uses a VerifierFilter to validate 037 * SAX events that goes through this component. 038 * Discovered error information is just passed down to the next component. 039 * 040 * <p> 041 * This will enable the implementation to validate all sources of SAX events 042 * in the RI - XMLReader, DOMScanner 043 * 044 * SAX events will go the VerifierFilter and then to the SAXUnmarshaller... 045 * 046 */ 047 public class ValidatingUnmarshaller extends ForkContentHandler 048 implements SAXUnmarshallerHandler { 049 050 /** 051 * Creates a new instance of ValidatingUnmarshaller. 052 */ 053 public static ValidatingUnmarshaller create( Grammar grammar, 054 SAXUnmarshallerHandler _core, 055 Locator locator ) { 056 057 // create a VerifierFilter and configure it 058 // so that error messages will be sent to the core, 059 Verifier v = new Verifier( 060 new REDocumentDeclaration(grammar), 061 new ErrorHandlerAdaptor(_core,locator) ); 062 v.setPanicMode( true ); 063 064 return new ValidatingUnmarshaller( 065 new VerifierFilter( v ), _core ); 066 } 067 068 private ValidatingUnmarshaller( VerifierFilter filter, 069 SAXUnmarshallerHandler _core ) { 070 071 super( filter, _core ); 072 this.core = _core; 073 } 074 075 // delegate to the next component 076 public Object getResult() throws JAXBException, IllegalStateException { 077 return core.getResult(); 078 } 079 080 public void handleEvent(ValidationEvent event, boolean canRecover ) throws SAXException { 081 // SAXUnmarshallerHandler already checks for RuntimeExceptions, so 082 // there is no need to wrap this call in a try/catch 083 core.handleEvent(event,canRecover); 084 } 085 086 private final SAXUnmarshallerHandler core; 087 088 089 private final AttributesImpl xsiLessAtts = new AttributesImpl(); 090 091 public void startElement( String nsUri, String local, String qname, Attributes atts ) throws SAXException { 092 // create an attributes set for MSV that doesn't contains xsi:schemaLocation 093 xsiLessAtts.clear(); 094 int len = atts.getLength(); 095 for( int i=0; i<len; i++ ) { 096 String aUri = atts.getURI(i); 097 String aLocal = atts.getLocalName(i); 098 if(aUri.equals("http://www.w3.org/2001/XMLSchema-instance") 099 && (aLocal.equals("schemaLocation") || 100 aLocal.equals("noNamespaceSchemaLocation") || 101 aLocal.equals("type"))) 102 continue; 103 104 // we do handle xsi:nil. 105 xsiLessAtts.addAttribute( aUri, aLocal, 106 atts.getQName(i), atts.getType(i), atts.getValue(i) ); 107 } 108 109 super.startElement(nsUri,local,qname,xsiLessAtts); 110 } 111 } 112 113 114 115 116 117 118