com.sun.xml.bind.v2.runtime
Class JAXBContextImpl

java.lang.Object
  extended by javax.xml.bind.JAXBContext
      extended by com.sun.xml.bind.api.JAXBRIContext
          extended by com.sun.xml.bind.v2.runtime.JAXBContextImpl

public final class JAXBContextImpl
extends JAXBRIContext

This class provides the implementation of JAXBContext.


Nested Class Summary
static class JAXBContextImpl.JAXBContextBuilder
           
 
Field Summary
 boolean allNillable
           
protected  java.util.Map<RuntimeTypeInfo,JaxBeanInfo> beanInfos
          All created JaxBeanInfos.
protected  boolean c14nSupport
          true to reorder attributes lexicographically in preparation of the c14n support.
 boolean fastBoot
          If true, we aim for faster JAXBContext instanciation performance, instead of going after efficient sustained unmarshalling/marshalling performance.
 boolean improvedXsiTypeHandling
          Improved xsi type handling.
 com.sun.istack.Pool<javax.xml.bind.Marshaller> marshallerPool
          Pool of Marshallers.
 NameBuilder nameBuilder
          Used to assign indices to known names in this grammar.
 NameList nameList
          Keeps the list of known names.
 boolean retainPropertyInfo
          Store properties, so that they can be recovered in the run (is here because of JSON encoding of Jersey).
 boolean supressAccessorWarnings
          Supress reflection accessor warnings.
 com.sun.istack.Pool<javax.xml.bind.Unmarshaller> unmarshallerPool
           
 boolean xmlAccessorFactorySupport
          Flag that user has provided a custom AccessorFactory for JAXB to use
 
Fields inherited from class com.sun.xml.bind.api.JAXBRIContext
ANNOTATION_READER, CANONICALIZATION_SUPPORT, DEFAULT_NAMESPACE_REMAP, ENABLE_XOP, IMPROVED_XSI_TYPE_HANDLING, RETAIN_REFERENCE_TO_INFO, SUBCLASS_REPLACEMENTS, SUPRESS_ACCESSOR_WARNINGS, TREAT_EVERYTHING_NILLABLE, TYPE_REFERENCES, XMLACCESSORFACTORY_SUPPORT
 
Fields inherited from class javax.xml.bind.JAXBContext
JAXB_CONTEXT_FACTORY
 
Method Summary
 JAXBContextImpl createAugmented(java.lang.Class<?> clazz)
          Creates a JAXBContextImpl that includes the specified additional classes.
 javax.xml.bind.Binder<org.w3c.dom.Node> createBinder()
           
<T> javax.xml.bind.Binder<T>
createBinder(java.lang.Class<T> domType)
           
 Bridge createBridge(TypeReference ref)
          Creates a mini-marshaller/unmarshaller that can process a TypeReference.
 BridgeContext createBridgeContext()
          Creates a new BridgeContext instance.
(package private) static org.w3c.dom.Document createDom()
          Creates a new DOM document.
 javax.xml.bind.JAXBIntrospector createJAXBIntrospector()
           
 MarshallerImpl createMarshaller()
           
 javax.xml.bind.SchemaOutputResolver createTestResolver()
          Used for testing.
(package private) static javax.xml.transform.Transformer createTransformer()
          Creates a new identity transformer.
static javax.xml.transform.sax.TransformerHandler createTransformerHandler()
          Creates a new identity transformer.
 UnmarshallerImpl createUnmarshaller()
           
 javax.xml.bind.Validator createValidator()
           
 void generateEpisode(javax.xml.transform.Result output)
          Generates the episode file that represents the binding known to this JAXBContext, so that XJC can later do separate compilation.
 void generateSchema(javax.xml.bind.SchemaOutputResolver outputResolver)
          Generates the schema documents from the model.
<T> JaxBeanInfo<T>
getBeanInfo(java.lang.Class<T> clazz)
          Gets the JaxBeanInfo object that can handle the given JAXB-bound class.
<T> JaxBeanInfo<T>
getBeanInfo(java.lang.Class<T> clazz, boolean fatal)
          Gets the JaxBeanInfo object that can handle the given JAXB-bound class.
 JaxBeanInfo getBeanInfo(java.lang.Object o)
          Gets the JaxBeanInfo object that can handle the given JAXB-bound object.
 JaxBeanInfo getBeanInfo(java.lang.Object o, boolean fatal)
          Gets the JaxBeanInfo object that can handle the given JAXB-bound object.
 java.lang.String getBuildId()
          Gets the build information of the JAXB runtime.
 ElementBeanInfoImpl getElement(java.lang.Class scope, javax.xml.namespace.QName name)
           
 javax.xml.namespace.QName getElementName(java.lang.Class o)
          Allows to retrieve the element name based on Class.
 javax.xml.namespace.QName getElementName(java.lang.Object o)
          If the given object is bound to an element in XML by JAXB, returns the element name.
 RawAccessor getElementPropertyAccessor(java.lang.Class wrapperBean, java.lang.String nsUri, java.lang.String localName)
          Gets a RawAccessor for the specified element property of the specified wrapper bean class.
 JaxBeanInfo getGlobalType(javax.xml.namespace.QName name)
          Gets the JaxBeanInfo for the given named XML Schema type.
 java.util.List<java.lang.String> getKnownNamespaceURIs()
          Gets the namespace URIs statically known to this JAXBContext.
 java.lang.String getNearestTypeName(javax.xml.namespace.QName name)
          Finds a type name that this context recognizes which is "closest" to the given type name.
 int getNumberOfAttributeNames()
           
 int getNumberOfElementNames()
           
 int getNumberOfLocalNames()
           
protected  JaxBeanInfo getOrCreate(RuntimeArrayInfo ai)
           
protected  ClassBeanInfoImpl getOrCreate(RuntimeClassInfo ci)
           
protected  JaxBeanInfo getOrCreate(RuntimeEnumLeafInfo eli)
           
 JaxBeanInfo getOrCreate(RuntimeTypeInfo e)
           
 RuntimeTypeInfoSet getRuntimeTypeInfoSet()
          Allows you to access the runtime model information of the JAXB XML/Java binding.
 RuntimeTypeInfoSet getTypeInfoSet()
          Creates a RuntimeTypeInfoSet.
 javax.xml.namespace.QName getTypeName(TypeReference tr)
          Returns the name of the XML Type bound to the specified Java type.
 Encoded[] getUTF8NameTable()
           
 java.util.Set<javax.xml.namespace.QName> getValidRootNames()
          Returns the set of valid root tag names.
 java.lang.String getXMIMEContentType(java.lang.Object o)
          Gets the value of the xmime:contentType attribute on the given object, or null if for some reason it couldn't be found, including any error.
 java.util.Set<javax.xml.bind.annotation.XmlNs> getXmlNsSet()
          Returns declared XmlNs annotations (from package-level annotation XmlSchema
 boolean hasSwaRef()
          True if this JAXBContext has XmlAttachmentRef.
 Loader selectRootLoader(UnmarshallingContext.State state, TagName tag)
          Based on the tag name, determine what object to unmarshal, and then set a new object and its loader to the current unmarshaller state.
 java.lang.String toString()
           
 
Methods inherited from class com.sun.xml.bind.api.JAXBRIContext
getBaseType, mangleNameToClassName, mangleNameToPropertyName, mangleNameToVariableName, newInstance, newInstance, newInstance
 
Methods inherited from class javax.xml.bind.JAXBContext
newInstance, newInstance, newInstance, newInstance, newInstance
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

beanInfos

protected java.util.Map<RuntimeTypeInfo,JaxBeanInfo> beanInfos
All created JaxBeanInfos. Updated from each JaxBeanInfos constructors to avoid infinite recursion for a cyclic reference.

This map is only used while the JAXBContextImpl is built and set to null to avoid keeping references too long.


marshallerPool

public final com.sun.istack.Pool<javax.xml.bind.Marshaller> marshallerPool
Pool of Marshallers.


unmarshallerPool

public final com.sun.istack.Pool<javax.xml.bind.Unmarshaller> unmarshallerPool

nameBuilder

public NameBuilder nameBuilder
Used to assign indices to known names in this grammar. Reset to null once the build phase is completed.


nameList

public final NameList nameList
Keeps the list of known names. This field is set once the build pahse is completed.


c14nSupport

protected final boolean c14nSupport
true to reorder attributes lexicographically in preparation of the c14n support.


xmlAccessorFactorySupport

public final boolean xmlAccessorFactorySupport
Flag that user has provided a custom AccessorFactory for JAXB to use


allNillable

public final boolean allNillable
See Also:
JAXBRIContext.TREAT_EVERYTHING_NILLABLE

retainPropertyInfo

public final boolean retainPropertyInfo
Store properties, so that they can be recovered in the run (is here because of JSON encoding of Jersey).


supressAccessorWarnings

public final boolean supressAccessorWarnings
Supress reflection accessor warnings.


improvedXsiTypeHandling

public final boolean improvedXsiTypeHandling
Improved xsi type handling.


fastBoot

public final boolean fastBoot
If true, we aim for faster JAXBContext instanciation performance, instead of going after efficient sustained unmarshalling/marshalling performance.

Since:
2.0.4
Method Detail

getXmlNsSet

public java.util.Set<javax.xml.bind.annotation.XmlNs> getXmlNsSet()
Returns declared XmlNs annotations (from package-level annotation XmlSchema

Returns:
set of all present XmlNs annotations

hasSwaRef

public boolean hasSwaRef()
True if this JAXBContext has XmlAttachmentRef.

Specified by:
hasSwaRef in class JAXBRIContext

getRuntimeTypeInfoSet

public RuntimeTypeInfoSet getRuntimeTypeInfoSet()
Description copied from class: JAXBRIContext
Allows you to access the runtime model information of the JAXB XML/Java binding.

This is useful for doing a deeper integration with the JAXB RI. For more information about the model, see https://jaxb2-reflection.dev.java.net/

Specified by:
getRuntimeTypeInfoSet in class JAXBRIContext

getTypeInfoSet

public RuntimeTypeInfoSet getTypeInfoSet()
                                  throws IllegalAnnotationsException
Creates a RuntimeTypeInfoSet.

Throws:
IllegalAnnotationsException

getElement

public ElementBeanInfoImpl getElement(java.lang.Class scope,
                                      javax.xml.namespace.QName name)

getOrCreate

protected JaxBeanInfo getOrCreate(RuntimeEnumLeafInfo eli)

getOrCreate

protected ClassBeanInfoImpl getOrCreate(RuntimeClassInfo ci)

getOrCreate

protected JaxBeanInfo getOrCreate(RuntimeArrayInfo ai)

getOrCreate

public JaxBeanInfo getOrCreate(RuntimeTypeInfo e)

getBeanInfo

public final JaxBeanInfo getBeanInfo(java.lang.Object o)
Gets the JaxBeanInfo object that can handle the given JAXB-bound object.

This method traverses the base classes of the given object.

Returns:
null if c isn't a JAXB-bound class and fatal==false.

getBeanInfo

public final JaxBeanInfo getBeanInfo(java.lang.Object o,
                                     boolean fatal)
                              throws javax.xml.bind.JAXBException
Gets the JaxBeanInfo object that can handle the given JAXB-bound object.

Parameters:
fatal - if true, the failure to look up will throw an exception. Otherwise it will just return null.
Throws:
javax.xml.bind.JAXBException

getBeanInfo

public final <T> JaxBeanInfo<T> getBeanInfo(java.lang.Class<T> clazz)
Gets the JaxBeanInfo object that can handle the given JAXB-bound class.

This method doesn't look for base classes.

Returns:
null if c isn't a JAXB-bound class and fatal==false.

getBeanInfo

public final <T> JaxBeanInfo<T> getBeanInfo(java.lang.Class<T> clazz,
                                            boolean fatal)
                                 throws javax.xml.bind.JAXBException
Gets the JaxBeanInfo object that can handle the given JAXB-bound class.

Parameters:
fatal - if true, the failure to look up will throw an exception. Otherwise it will just return null.
Throws:
javax.xml.bind.JAXBException

selectRootLoader

public final Loader selectRootLoader(UnmarshallingContext.State state,
                                     TagName tag)
Based on the tag name, determine what object to unmarshal, and then set a new object and its loader to the current unmarshaller state.

Returns:
null if the given name pair is not recognized.

getGlobalType

public JaxBeanInfo getGlobalType(javax.xml.namespace.QName name)
Gets the JaxBeanInfo for the given named XML Schema type.

Returns:
null if the type name is not recognized. For schema languages other than XML Schema, this method always returns null.

getNearestTypeName

public java.lang.String getNearestTypeName(javax.xml.namespace.QName name)
Finds a type name that this context recognizes which is "closest" to the given type name.

This method is used for error recovery.


getValidRootNames

public java.util.Set<javax.xml.namespace.QName> getValidRootNames()
Returns the set of valid root tag names. For diagnostic use.


getUTF8NameTable

public Encoded[] getUTF8NameTable()

getNumberOfLocalNames

public int getNumberOfLocalNames()

getNumberOfElementNames

public int getNumberOfElementNames()

getNumberOfAttributeNames

public int getNumberOfAttributeNames()

createTransformer

static javax.xml.transform.Transformer createTransformer()
Creates a new identity transformer.


createTransformerHandler

public static javax.xml.transform.sax.TransformerHandler createTransformerHandler()
Creates a new identity transformer.


createDom

static org.w3c.dom.Document createDom()
Creates a new DOM document.


createMarshaller

public MarshallerImpl createMarshaller()
Specified by:
createMarshaller in class javax.xml.bind.JAXBContext

createUnmarshaller

public UnmarshallerImpl createUnmarshaller()
Specified by:
createUnmarshaller in class javax.xml.bind.JAXBContext

createValidator

public javax.xml.bind.Validator createValidator()
Specified by:
createValidator in class javax.xml.bind.JAXBContext

createJAXBIntrospector

public javax.xml.bind.JAXBIntrospector createJAXBIntrospector()
Overrides:
createJAXBIntrospector in class javax.xml.bind.JAXBContext

generateEpisode

public void generateEpisode(javax.xml.transform.Result output)
Description copied from class: JAXBRIContext
Generates the episode file that represents the binding known to this JAXBContext, so that XJC can later do separate compilation.

Episode file is really just a JAXB customization file, except that currently we use the RI-specific SCD to refer to schema components.

Specified by:
generateEpisode in class JAXBRIContext
Parameters:
output - This receives the generated episode file.

generateSchema

public void generateSchema(javax.xml.bind.SchemaOutputResolver outputResolver)
                    throws java.io.IOException
Description copied from class: JAXBRIContext
Generates the schema documents from the model.

The caller can use the additionalElementDecls parameter to add element declarations to the generate schema. For example, if the JAX-RPC passes in the following entry: {foo}bar -> DeclaredType for java.lang.String then JAXB generates the following element declaration (in the schema document for the namespace "foo")" <xs:element name="bar" type="xs:string" /> This can be used for generating schema components necessary for WSDL.

Specified by:
generateSchema in class JAXBRIContext
Parameters:
outputResolver - this object controls the output to which schemas will be sent.
Throws:
java.io.IOException - if SchemaOutputResolver throws an IOException.

getTypeName

public javax.xml.namespace.QName getTypeName(TypeReference tr)
Description copied from class: JAXBRIContext
Returns the name of the XML Type bound to the specified Java type.

Specified by:
getTypeName in class JAXBRIContext
Parameters:
tr - must not be null. This must be one of the TypeReferences specified in the JAXBRIContext.newInstance(java.lang.Class[], java.util.Collection, java.util.Map, java.lang.String, boolean, com.sun.xml.bind.v2.model.annotation.RuntimeAnnotationReader) method.
Returns:
null if the referenced type is an anonymous and therefore doesn't have a name.

createTestResolver

public javax.xml.bind.SchemaOutputResolver createTestResolver()
Used for testing.


createBinder

public <T> javax.xml.bind.Binder<T> createBinder(java.lang.Class<T> domType)
Overrides:
createBinder in class javax.xml.bind.JAXBContext

createBinder

public javax.xml.bind.Binder<org.w3c.dom.Node> createBinder()
Overrides:
createBinder in class javax.xml.bind.JAXBContext

getElementName

public javax.xml.namespace.QName getElementName(java.lang.Object o)
                                         throws javax.xml.bind.JAXBException
Description copied from class: JAXBRIContext
If the given object is bound to an element in XML by JAXB, returns the element name.

Specified by:
getElementName in class JAXBRIContext
Returns:
null if the object is not bound to an element.
Throws:
javax.xml.bind.JAXBException - if the object is not known to this context.

getElementName

public javax.xml.namespace.QName getElementName(java.lang.Class o)
                                         throws javax.xml.bind.JAXBException
Description copied from class: JAXBRIContext
Allows to retrieve the element name based on Class.

Specified by:
getElementName in class JAXBRIContext
Returns:
Throws:
javax.xml.bind.JAXBException

createBridge

public Bridge createBridge(TypeReference ref)
Description copied from class: JAXBRIContext
Creates a mini-marshaller/unmarshaller that can process a TypeReference.

Specified by:
createBridge in class JAXBRIContext
Returns:
null if the specified reference is not given to JAXBRIContext.newInstance(java.lang.Class[], java.util.Collection, java.util.Map, java.lang.String, boolean, com.sun.xml.bind.v2.model.annotation.RuntimeAnnotationReader).

createBridgeContext

@NotNull
public BridgeContext createBridgeContext()
Description copied from class: JAXBRIContext
Creates a new BridgeContext instance.

Specified by:
createBridgeContext in class JAXBRIContext
Returns:
always a valid non-null instance.

getElementPropertyAccessor

public RawAccessor getElementPropertyAccessor(java.lang.Class wrapperBean,
                                              java.lang.String nsUri,
                                              java.lang.String localName)
                                       throws javax.xml.bind.JAXBException
Description copied from class: JAXBRIContext
Gets a RawAccessor for the specified element property of the specified wrapper bean class.

This method is designed to assist the JAX-RPC RI fill in a wrapper bean (in the doc/lit/wrap mode.) In the said mode, a wrapper bean is supposed to only have properties that match elements, and for each element that appear in the content model there's one property.

Therefore, this method takes a wrapper bean and a tag name that identifies a property on the given wrapper bean, then returns a RawAccessor that allows the caller to set/get a value from the property of the bean.

This method is not designed for a performance. The caller is expected to cache the result.

Specified by:
getElementPropertyAccessor in class JAXBRIContext
Returns:
always return non-null valid accessor object.
Throws:
javax.xml.bind.JAXBException - if the specified wrapper bean is not bound by JAXB, or if it doesn't have an element property of the given name.

getKnownNamespaceURIs

public java.util.List<java.lang.String> getKnownNamespaceURIs()
Description copied from class: JAXBRIContext
Gets the namespace URIs statically known to this JAXBContext.

When JAXB is used to marshal into sub-trees, it declares these namespace URIs at each top-level element that it marshals. To avoid repeated namespace declarations at sub-elements, the application may declare those namespaces at a higher level.

Specified by:
getKnownNamespaceURIs in class JAXBRIContext
Returns:
always non-null.

getBuildId

public java.lang.String getBuildId()
Description copied from class: JAXBRIContext
Gets the build information of the JAXB runtime.

Specified by:
getBuildId in class JAXBRIContext
Returns:
may be null, if the runtime is loaded by a class loader that doesn't support the access to the manifest informatino.

toString

public java.lang.String toString()
Overrides:
toString in class java.lang.Object

getXMIMEContentType

public java.lang.String getXMIMEContentType(java.lang.Object o)
Gets the value of the xmime:contentType attribute on the given object, or null if for some reason it couldn't be found, including any error.


createAugmented

public JAXBContextImpl createAugmented(java.lang.Class<?> clazz)
                                throws javax.xml.bind.JAXBException
Creates a JAXBContextImpl that includes the specified additional classes.

Throws:
javax.xml.bind.JAXBException