c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk//
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v1.0.6-b27-fcs
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a>
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk// Any modifications to this file will be lost upon recompilation of the source schema.
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk// Generated on: 2012.06.11 at 10:34:16 AM PDT
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk//
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenkpackage com.sun.identity.wsfederation.jaxb.entityconfig.impl.runtime;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenkimport java.util.HashSet;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenkimport java.util.Iterator;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenkimport java.util.Set;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenkimport javax.xml.bind.JAXBException;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenkimport javax.xml.bind.ValidationEvent;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenkimport javax.xml.bind.ValidationEventHandler;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenkimport javax.xml.bind.helpers.NotIdentifiableEventImpl;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenkimport javax.xml.bind.helpers.ValidationEventLocatorImpl;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenkimport org.xml.sax.ContentHandler;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenkimport org.xml.sax.SAXException;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenkimport org.xml.sax.helpers.AttributesImpl;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenkimport com.sun.xml.bind.JAXBAssertionError;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenkimport com.sun.xml.bind.JAXBObject;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenkimport com.sun.xml.bind.marshaller.IdentifiableObject;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenkimport com.sun.xml.bind.marshaller.Messages;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenkimport com.sun.xml.bind.marshaller.NamespacePrefixMapper;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenkimport com.sun.xml.bind.serializer.AbortSerializationException;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenkimport com.sun.xml.bind.serializer.Util;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk/**
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * XMLSerializer that produces SAX2 events.
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk *
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * To marshal an object, create an instance of SAXMarshaller
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * and call the serializeElements method of the XMLSerializable
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * object that you want to marshal.
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk *
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * @author Kohsuke Kawaguchi
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk */
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenkpublic class SAXMarshaller implements XMLSerializer
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk{
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk /**
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * "Attributes" object that is passed to the startElement event.
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * One object is reused throughout the marshalling.
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk */
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk private final AttributesImpl attributes = new AttributesImpl();
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk /** This object receives SAX2 events generated from the marshaller. */
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk private final ContentHandler writer;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk /** Marshaller object to which this object belongs. */
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk private final MarshallerImpl owner;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk /** Objects referenced through IDREF. */
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk private final Set idReferencedObjects = new HashSet();
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk /** Objects with ID. */
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk private final Set objectsWithId = new HashSet();
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk /** Object currently marshalling itself. */
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk private JAXBObject currentTarget;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk /**
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * Creates a marshalling context by designating the ContentHandler
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * that receives generated SAX2 events.
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk */
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk public SAXMarshaller( ContentHandler _writer, NamespacePrefixMapper prefixMapper, MarshallerImpl _owner ) {
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk this.writer = _writer;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk this.owner = _owner;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk this.nsContext = new NamespaceContextImpl(
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk prefixMapper!=null?prefixMapper:defaultNamespacePrefixMapper);
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk }
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk /** namespace context. */
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk private final NamespaceContextImpl nsContext;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk public NamespaceContext2 getNamespaceContext() { return nsContext; }
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk //
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk //
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // name stack
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk //
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk //
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk /** Element name stack implemented as an array of (uri,local) pairs. */
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk private String[] elementStack = new String[16];;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk private int elementLen=0;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk private void pushElement( String uri, String local ) {
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk if(elementStack.length==elementLen) {
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // reallocate buffer
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk String[] buf = new String[elementStack.length*2];
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk System.arraycopy( elementStack, 0, buf, 0, elementStack.length );
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk elementStack = buf;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk }
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk elementStack[elementLen++] = uri;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk elementStack[elementLen++] = local;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk }
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk private void popElement() { elementLen-=2; }
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk private String getCurrentElementUri() { return elementStack[elementLen-2]; }
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk private String getCurrentElementLocal() { return elementStack[elementLen-1]; }
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk /**
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * Starts marshalling of an element.
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * Calling this method will push the internal state into the
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * internal stack.
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk */
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk public void startElement( String uri, String local ) throws SAXException {
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk boolean isRoot = false;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk String suggestion = null;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk if( elementLen==0 ) {
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk isRoot = true;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // this is the root element. suggest this as the default namespace
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk suggestion = "";
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk }
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk writePendingText();
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk nsContext.startElement();
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk pushElement(uri,local); // memorize element name
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // declare this uri
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk nsContext.declareNamespace(uri,suggestion,false);
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // if this is the root element, declare user-specified namespace URIs.
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk if( isRoot ) {
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // work defensively. we are calling an user-defined method.
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk String[] uris = nsContext.getNamespacePrefixMapper().getPreDeclaredNamespaceUris();
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk if( uris!=null ) {
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk for( int i=0; i<uris.length; i++ ) {
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk if( uris[i]!=null )
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk nsContext.declareNamespace(uris[i],null,false);
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk }
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk }
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk }
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk }
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk private final PrefixCallback startPrefixCallback = new PrefixCallback() {
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk public void onPrefixMapping( String prefix, String nsUri ) throws SAXException {
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk writer.startPrefixMapping(prefix,nsUri);
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk }
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk };
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk private final PrefixCallback endPrefixCallback = new PrefixCallback() {
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk public void onPrefixMapping( String prefix, String nsUri ) throws SAXException {
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk writer.endPrefixMapping(prefix);
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk }
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk };
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk public void endNamespaceDecls() throws SAXException {
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk nsContext.endNamespaceDecls();
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk }
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk /**
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * Switches to the "marshal child texts/elements" mode.
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * This method has to be called after the 1st pass is completed.
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk */
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk public void endAttributes() throws SAXException {
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // calculate QName of the element
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk String uri = getCurrentElementUri();
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk String local = getCurrentElementLocal();
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk String prefix = nsContext.getPrefix(uri);
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk _assert(prefix!=null); // since we've declared it, it should be available
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk String qname;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk if(prefix.length()!=0 )
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk qname = prefix+':'+local;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk else
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk qname = local;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // fire startPrefixMapping events
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk nsContext.iterateDeclaredPrefixes(startPrefixCallback);
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // fire the startElement event
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk writer.startElement( uri, local, qname, attributes );
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // reset attributes
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk attributes.clear();
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // prepare to collect texts
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk textBuf.setLength(0);
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk }
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk /**
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * Ends marshalling of an element.
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * Pops the internal stack.
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk */
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk public void endElement() throws SAXException {
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk writePendingText();
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk String uri = getCurrentElementUri();
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk String local = getCurrentElementLocal();
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk String prefix = nsContext.getPrefix(uri);
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk _assert(prefix!=null); // we've declared it earlier.
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk String qname;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk if(prefix.length()!=0)
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk qname = prefix+':'+local;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk else
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk qname = local;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk writer.endElement( uri, local, qname );
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // pop namespace bindings and
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // fire endPrefixMapping events
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk nsContext.iterateDeclaredPrefixes(endPrefixCallback);
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk popElement();
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // prepare to collect texts
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk textBuf.setLength(0);
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk nsContext.endElement();
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk }
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk /** Buffer for collecting characters. */
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk private final StringBuffer textBuf = new StringBuffer();
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk /**
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * Marshalls text.
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk *
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * <p>
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * This method can be called (i) after the startAttribute method
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * and (ii) before the endAttribute method, to marshal attribute values.
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * If the method is called more than once, those texts are considered
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * as separated by whitespaces. For example,
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk *
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * <pre>
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * c.startAttribute();
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * c.text("abc");
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * c.text("def");
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * c.endAttribute("","foo");
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * </pre>
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk *
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * will generate foo="abc def".
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk *
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * <p>
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * Similarly, this method can be called after the endAttributes
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * method to marshal texts inside elements. The same rule about
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * multiple invokations apply to this case, too. For example,
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk *
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * <pre>
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * c.startElement("","foo");
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * c.endAttributes();
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * c.text("abc");
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * c.text("def");
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * c.startElement("","bar");
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * c.endAttributes();
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * c.endElement();
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * c.text("ghi");
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * c.endElement();
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * </pre>
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk *
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * will generate <code>&lt;foo>abc def&lt;bar/>ghi&lt;/foo></code>.
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk */
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk public void text( String text, String fieldName ) throws SAXException {
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // If the assertion fails, it must be a bug of xjc.
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // right now, we are not expecting the text method to be called.
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk if(text==null) {
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk reportError(Util.createMissingObjectError(currentTarget,fieldName));
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk return;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk }
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk if(textBuf.length()!=0)
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk textBuf.append(' ');
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk textBuf.append(text);
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk }
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk /**
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * Writes pending text (characters inside elements) to the writer.
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * This method is called from startElement and endElement.
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk */
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk private void writePendingText() throws SAXException {
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // assert(textBuf!=null);
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk int len = textBuf.length();
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk if(len!=0)
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk writer.characters( textBuf.toString().toCharArray(), 0, len );
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk }
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk /**
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * Starts marshalling of an attribute.
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk *
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * The marshalling of an attribute will be done by
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * <ol>
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * <li>call the startAttribute method
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * <li>call the text method (several times if necessary)
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * <li>call the endAttribute method
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * </ol>
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk *
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * No two attributes can be marshalled at the same time.
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * Note that the whole attribute marshalling must be happened
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * after the startElement method and before the endAttributes method.
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk */
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk public void startAttribute( String uri, String local ) {
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // initialize the buffer to collect attribute value
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk textBuf.setLength(0);
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // remember the attribute name. We'll use this value later.
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk this.attNamespaceUri = uri;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk this.attLocalName = local;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk }
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // used to keep attribute names until the endAttribute method is called.
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk private String attNamespaceUri;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk private String attLocalName;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk public void endAttribute() {
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // use CDATA as the attribute type. This preserves
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // successive processors to collapse whitespaces.
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // (we cannot prevent characters like #xD to be replaced to
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // #x20, though).
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk //
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // strictly speaking, attribute value normalization should be
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // provessed by XML parser, so it's unclear whether XML writer
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // uses this type value.
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk //
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // in any way, CDATA type is the safest choice here.
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk String qname;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk if(attNamespaceUri.length()==0) {
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // default namespace. don't need prefix
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk qname = attLocalName;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk } else {
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk qname = nsContext.declareNamespace(attNamespaceUri,null,true)+':'+attLocalName;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk }
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk attributes.addAttribute(attNamespaceUri,attLocalName,qname,"CDATA",textBuf.toString());
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk }
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk public String onID( IdentifiableObject owner, String value ) throws SAXException {
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk objectsWithId.add(owner);
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk return value;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk }
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk public String onIDREF( IdentifiableObject obj ) throws SAXException {
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk idReferencedObjects.add(obj);
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk String id = obj.____jaxb____getId();
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk if(id==null) {
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk reportError( new NotIdentifiableEventImpl(
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk ValidationEvent.ERROR,
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk Messages.format(Messages.ERR_NOT_IDENTIFIABLE),
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk new ValidationEventLocatorImpl(obj) ) );
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk }
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk return id;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk }
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk void reconcileID() throws AbortSerializationException {
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // find objects that were not a part of the object graph
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk idReferencedObjects.removeAll(objectsWithId);
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk for( Iterator itr=idReferencedObjects.iterator(); itr.hasNext(); ) {
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk IdentifiableObject o = (IdentifiableObject)itr.next();
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk reportError( new NotIdentifiableEventImpl(
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk ValidationEvent.ERROR,
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk Messages.format(Messages.ERR_DANGLING_IDREF,o.____jaxb____getId()),
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk new ValidationEventLocatorImpl(o) ) );
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk }
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // clear the garbage
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk idReferencedObjects.clear();
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk objectsWithId.clear();
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk }
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk public void childAsBody( JAXBObject o, String fieldName ) throws SAXException {
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk if(o==null) {
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // if null is passed, it usually means that the content tree object
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // doesn't have some of its required property.
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk reportMissingObjectError(fieldName);
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // as a marshaller, we should be generous, so we'll continue to marshal
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk // this document by skipping this missing object.
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk return;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk }
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk JAXBObject oldTarget = currentTarget;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk currentTarget = o;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk owner.context.getGrammarInfo().castToXMLSerializable(o).serializeBody(this);
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk currentTarget = oldTarget;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk }
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk public void childAsAttributes( JAXBObject o, String fieldName ) throws SAXException {
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk if(o==null) {
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk reportMissingObjectError(fieldName);
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk return;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk }
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk JAXBObject oldTarget = currentTarget;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk currentTarget = o;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk owner.context.getGrammarInfo().castToXMLSerializable(o).serializeAttributes(this);
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk currentTarget = oldTarget;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk }
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk public void childAsURIs( JAXBObject o, String fieldName ) throws SAXException {
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk if(o==null) {
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk reportMissingObjectError(fieldName);
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk return;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk }
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk JAXBObject oldTarget = currentTarget;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk currentTarget = o;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk owner.context.getGrammarInfo().castToXMLSerializable(o).serializeURIs(this);
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk currentTarget = oldTarget;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk }
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk public void reportError( ValidationEvent ve ) throws AbortSerializationException {
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk ValidationEventHandler handler;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk try {
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk handler = owner.getEventHandler();
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk } catch( JAXBException e ) {
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk throw new AbortSerializationException(e);
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk }
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk if(!handler.handleEvent(ve)) {
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk if(ve.getLinkedException() instanceof Exception)
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk throw new AbortSerializationException((Exception)ve.getLinkedException());
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk else
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk throw new AbortSerializationException(ve.getMessage());
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk }
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk }
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk public void reportMissingObjectError(String fieldName) throws SAXException {
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk reportError(Util.createMissingObjectError(currentTarget,fieldName));
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk }
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk private static void _assert( boolean b ) {
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk if(!b)
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk throw new JAXBAssertionError();
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk }
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk /**
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * Default {@link NamespacePrefixMapper} implementation used when
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk * it is not specified by the user.
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk */
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk private static NamespacePrefixMapper defaultNamespacePrefixMapper = new NamespacePrefixMapper() {
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk public String getPreferredPrefix(String namespaceUri, String suggestion, boolean requirePrefix) {
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk if( namespaceUri.equals("http://www.w3.org/2001/XMLSchema-instance") )
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk return "xsi";
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk return suggestion;
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk }
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk };
c1350cf5bc50458ba79cc93ff9e0e5fe3f1aeeb0jeff.schenk}