com.sun.xml.bind.unmarshaller.UnmarshallingContext Maven / Gradle / Ivy
/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
*
* Copyright (c) 1997-2017 Oracle and/or its affiliates. All rights reserved.
*
* The contents of this file are subject to the terms of either the GNU
* General Public License Version 2 only ("GPL") or the Common Development
* and Distribution License("CDDL") (collectively, the "License"). You
* may not use this file except in compliance with the License. You can
* obtain a copy of the License at
* https://oss.oracle.com/licenses/CDDL+GPL-1.1
* or LICENSE.txt. See the License for the specific
* language governing permissions and limitations under the License.
*
* When distributing the software, include this License Header Notice in each
* file and include the License file at LICENSE.txt.
*
* GPL Classpath Exception:
* Oracle designates this particular file as subject to the "Classpath"
* exception as provided by Oracle in the GPL Version 2 section of the License
* file that accompanied this code.
*
* Modifications:
* If applicable, add the following below the License Header, with the fields
* enclosed by brackets [] replaced by your own identifying information:
* "Portions Copyright [year] [name of copyright owner]"
*
* Contributor(s):
* If you wish your version of this file to be governed by only the CDDL or
* only the GPL Version 2, indicate your decision by adding "[Contributor]
* elects to include this software in this distribution under the [CDDL or GPL
* Version 2] license." If you don't indicate a single choice of license, a
* recipient has the option to distribute your version of this file under
* either the CDDL, the GPL Version 2 or to extend the choice of license to
* its licensees as provided above. However, if you add GPL Version 2 code
* and therefore, elected the GPL Version 2 license, then the option applies
* only if the new code is made subject to such option by the copyright
* holder.
*/
package com.sun.xml.bind.unmarshaller;
import javax.xml.bind.ValidationEventHandler;
import javax.xml.namespace.NamespaceContext;
import org.relaxng.datatype.ValidationContext;
import org.xml.sax.Attributes;
import org.xml.sax.ContentHandler;
import org.xml.sax.Locator;
import com.sun.xml.bind.TypeRegistry;
/**
* Methods exposed by the unmarshalling coordinator object
* to the generated code.
*
* This interface will be implemented by the coordinator, which
* converts whatever events (e.g., SAX) into unmarshalling events.
*
*
* Errors detected by the ContentHandlerEx-derived classes should
* be either thrown as {@link UnreportedException} or reported through
* the handleEvent method of this interface.
*
* @author Kohsuke KAWAGUCHI
* @since JAXB1.0
* @deprecated in JAXB1.0.1
*/
public interface UnmarshallingContext extends
ValidationContext, ContentHandler, NamespaceContext, ValidationEventHandler
{
/** Obtains a reference to the current type registry. */
TypeRegistry getTypeRegistry();
/**
* Pushes the current content handler into the stack
* and registers the newly specified content handler so
* that it can receive SAX events.
*
* @param memento
* When this newly specified handler will be removed from the stack,
* the leaveChild event will be fired to the parent handler
* with this memento.
*/
void pushContentHandler( UnmarshallingEventHandler handler, int memento );
/**
* Pops a content handler from the stack and registers
* it as the current content handler.
*
*
* This method will also fire the leaveChild event with the
* associated memento.
*/
void popContentHandler() throws UnreportedException;
/**
* Gets the current handler.
*
*
* Returns the same object as the getCurrentEventHandler
* but in a different type.
*
* @deprecated
* Ue the getCurentEventHandler method.
*/
ContentHandlerEx getCurrentHandler();
/**
* Gets the current handler.
*/
UnmarshallingEventHandler getCurrentEventHandler();
// those two methods are defined in SAX ContentHandler
/**
* Adds a new namespace declaration.
* This method should be called by the generated code.
*/
void startPrefixMapping( String prefix, String namespaceUri );
/**
* Removes a namespace declaration.
* This method should be called by the generated code.
*/
void endPrefixMapping( String prefix );
/**
* Stores a new attribute set.
* This method should be called by the generated code
* when it "eats" an enterElement event.
*/
void pushAttributes( Attributes atts );
/**
* Discards the previously stored attribute set.
* This method should be called by the generated code
* when it "eats" a leaveElement event.
*/
void popAttributes();
/**
* Gets the index of the attribute with the specified name.
* This is usually faster when you only need to test with
* a simple name.
*
* @return
* -1 if not found.
*/
int getAttribute( String uri, String name );
/**
* Gets all the unconsumed attributes.
* If you need to find attributes based on more complex filter,
* you need to use this method.
*/
Attributes getUnconsumedAttributes();
/**
* Fires an attribute event for the specified attribute.
*/
void consumeAttribute( int idx ) throws UnreportedException;
/**
* Adds a job that will be executed at the last of the unmarshalling.
* This method is used to support ID/IDREF feature, but it can be used
* for other purposes as well.
*
* @param job
* The run method of this object is called.
*/
void addPatcher( Runnable job );
// TODO: shall we use a modified version of Runnable so that
// the patcher can throw JAXBException?
/**
* Adds the object which is currently being unmarshalled
* to the ID table.
*
* @return
* Returns the value passed as the parameter.
* This is a hack, but this makes it easier for ID
* transducer to do its job.
*/
String addToIdTable( String id );
// TODO: what shall we do if the ID is already declared?
//
// throwing an exception is one way. Overwriting the previous one
// is another way. The latter allows us to process invalid documents,
// while the former makes it impossible to handle them.
//
// I prefer to be flexible in terms of invalid document handling,
// so chose not to throw an exception.
//
// I believe this is an implementation choice, not the spec issue.
// -kk
/**
* Looks up the ID table and gets associated object.
*
* @return
* If there is no object associated with the given id,
* this method returns null.
*/
UnmarshallableObject getObjectFromId( String id );
// TODO: maybe we should throw UnmarshallingException
// if we don't find ID.
/**
* Gets the current source location information.
*/
Locator getLocator();
// DBG
/**
* Gets a tracer object.
*
* Tracer can be used to trace the unmarshalling behavior.
* Note that to debug the unmarshalling process,
* you have to configure XJC so that it will emit trace codes
* in the unmarshaller.
*/
Tracer getTracer();
}