Class JAXBContext
- java.lang.Object
-
- javax.xml.bind.JAXBContext
-
- org.eclipse.persistence.jaxb.JAXBContext
-
- Direct Known Subclasses:
DynamicJAXBContext
public class JAXBContext extends JAXBContext
Purpose:Provide a EclipseLink implementation of the JAXBContext interface.
Responsibilities:
- Create Marshaller instances
- Create Unmarshaller instances
- Create Binder instances
- Create Introspector instances
- Create Validator instances
- Generate Schema Files
This is the EclipseLink JAXB 2.0 implementation of javax.xml.bind.JAXBContext. This class is created by the JAXBContextFactory and is used to create Marshallers, Unmarshallers, Validators, Binders and Introspectors. A JAXBContext can also be used to create Schema Files.
Bootstrapping: When bootstrapping the JAXBContext from a EclipseLink externalized metadata file(s) a number of input options are available. The externalized metadata file (one per package) is passed in through a property when creating the JAXBContext. The key used in the properties map is "eclipselink-oxm-xml". The externalized metadata file can be set in the properties map in one of three ways:
i) For a single externalized metadata file, one of the following can be set in the properties map:
- java.io.File
- java.io.InputStream
- java.io.Reader
- java.net.URL
- javax.xml.stream.XMLEventReader
- javax.xml.stream.XMLStreamReader
- javax.xml.transform.Source
- org.w3c.dom.Node
- org.xml.sax.InputSource
ii) For multiple externalized metadata files where the package name is specified within each externalized metadata file, a List can be used. The entries in the List are to be one of the types listed in i) above.
iii) For multiple externalized metadata files where the package name is not specified in each externalized metadata file, a Map can be used. The key must be a String (package name) and each value in the Map (externalized metadata file) is to be one of the types listed in i) above.
Note that in each of the above cases the package name can be set via package-name attribute on the xml-bindings element in the externalized metadata file. If set, any java-type names in the given metadata file that do not contain the package name will have that package name prepended to it. Also note that a List or Map can be used for a single externalized metadata file.
- See Also:
JAXBContext
,JAXBMarshaller
,JAXBUnmarshaller
,JAXBBinder
,JAXBIntrospector
,JAXBContextProperties
- Author:
- mmacivor
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
JAXBContext.JAXBContextInput
The JAXBContextInput is used to create a JAXBContextState which is responsible for accessing the underlying XMLContextprotected static class
JAXBContext.JAXBContextState
-
Field Summary
Fields Modifier and Type Field Description protected JAXBContext.JAXBContextInput
contextInput
protected JAXBContext.JAXBContextState
contextState
protected static ValidationEventHandler
DEFAULT_VALIDATION_EVENT_HANDLER
For JAXB 2 there is no explicitly defined default validation handler and the default event handling only terminates the operation after encountering a fatal error.-
Fields inherited from class javax.xml.bind.JAXBContext
JAXB_CONTEXT_FACTORY
-
-
Constructor Summary
Constructors Modifier Constructor Description protected
JAXBContext()
protected
JAXBContext(JAXBContext.JAXBContextInput contextInput)
JAXBContext(XMLContext context)
Create a JAXBContext for a given XMLContext.JAXBContext(XMLContext context, Generator generator, java.lang.reflect.Type[] boundTypes)
Create a JAXBContext.JAXBContext(XMLContext context, Generator generator, TypeMappingInfo[] boundTypes)
Create a JAXBContext.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
applyORMMetadata(org.eclipse.persistence.internal.sessions.AbstractSession ormSession)
ADVANCED: Adjust the OXM metadata to take into account ORM mapping metadataJAXBBinder
createBinder()
Create a JAXBBinder.<T> JAXBBinder
createBinder(java.lang.Class<T> nodeClass)
Create a JAXBBinder.java.lang.Object
createByQualifiedName(java.lang.String namespace, java.lang.String typeName, boolean isGlobalType)
Create a new object instance for a given XML namespace and name.<T> T
createByXPath(java.lang.Object parentObject, java.lang.String xPath, NamespaceResolver namespaceResolver, java.lang.Class<T> returnType)
Create a new object instance for a given XPath, relative to the parentObject.protected JAXBElement
createJAXBElement(javax.xml.namespace.QName qname, java.lang.Class theClass, java.lang.Object value)
protected JAXBElement
createJAXBElementFromXMLRoot(org.eclipse.persistence.internal.oxm.Root xmlRoot, java.lang.Class declaredType)
JAXBIntrospector
createJAXBIntrospector()
Creates a JAXBIntrospector object.JAXBMarshaller
createMarshaller()
Create a JAXBMarshaller.ObjectGraph
createObjectGraph(java.lang.Class type)
ObjectGraph
createObjectGraph(java.lang.String typeName)
JAXBUnmarshaller
createUnmarshaller()
Create a JAXBUnmarshaller.JAXBValidator
createValidator()
Create a JAXBValidator.void
generateJsonSchema(SchemaOutputResolver outputResolver, java.lang.Class rootClass)
void
generateSchema(SchemaOutputResolver outputResolver)
Generate a Schema for this JAXBContextvoid
generateSchema(SchemaOutputResolver outputResolver, java.util.Map<javax.xml.namespace.QName,java.lang.reflect.Type> additonalGlobalElements)
Generate a Schema for this JAXBContextjava.util.Map<java.lang.String,java.lang.Class>
getArrayClassesToGeneratedClasses()
INTERNAL: Get the map for which array class (by name) corresponds to which generated classBeanValidationHelper
getBeanValidationHelper()
Returns BeanValidationHelper.java.util.Map<java.lang.String,java.lang.Class>
getClassToGeneratedClasses()
INTERNAL: Get the map containing which Class (by name) corresponds to which generated class.java.util.Map<java.lang.reflect.Type,java.lang.Class>
getCollectionClassesToGeneratedClasses()
INTERNAL: Get the map for which collection class (by Type) corresponds to which generated classjava.util.Map<javax.xml.namespace.QName,java.lang.Class>
getQNamesToDeclaredClasses()
INTERNAL: Get the map of which QName corresponds to which declared class.java.util.Map<TypeMappingInfo,javax.xml.namespace.QName>
getTypeMappingInfoToSchemaType()
INTERNAL: Get the map of which TypeMappingInfo corresponds to which QName.java.util.Map<java.lang.reflect.Type,javax.xml.namespace.QName>
getTypeToSchemaType()
INTERNAL: Get the map of which Type corresponds to which QName.<T> T
getValueByXPath(java.lang.Object object, java.lang.String xPath, NamespaceResolver namespaceResolver, java.lang.Class<T> returnType)
Get a value from an object based on an XPath statement.XMLContext
getXMLContext()
Return the XMLContext associated with this JAXBContext.javax.xml.stream.XMLInputFactory
getXMLInputFactory()
boolean
hasSwaRef()
Returns true if any Object in this context contains a property annotated with an XmlAttachmentRef annotation.void
initTypeToSchemaType()
INTERNAL: Populate the map of which Type corresponds to which QName.void
refreshMetadata()
ADVANCED:void
setClassToGeneratedClasses(java.util.HashMap<java.lang.String,java.lang.Class> classToClass)
INTERNAL: Set the map containing which Class (by name) corresponds to which generated class.void
setQNamesToDeclaredClasses(java.util.HashMap<javax.xml.namespace.QName,java.lang.Class> nameToDeclaredClasses)
INTERNAL: Set the map of which QName corresponds to which declared class.void
setQNameToGeneratedClasses(java.util.HashMap<javax.xml.namespace.QName,java.lang.Class> qNameToClass)
INTERNAL: Set the map containing which QName corresponds to which generated class.void
setValueByXPath(java.lang.Object object, java.lang.String xPath, NamespaceResolver namespaceResolver, java.lang.Object value)
Set a value on an object based on an XPath statement.void
setXMLContext(XMLContext xmlContext)
-
Methods inherited from class javax.xml.bind.JAXBContext
newInstance, newInstance, newInstance, newInstance, newInstance
-
-
-
-
Field Detail
-
DEFAULT_VALIDATION_EVENT_HANDLER
protected static final ValidationEventHandler DEFAULT_VALIDATION_EVENT_HANDLER
For JAXB 2 there is no explicitly defined default validation handler and the default event handling only terminates the operation after encountering a fatal error.
-
contextInput
protected JAXBContext.JAXBContextInput contextInput
-
contextState
protected volatile JAXBContext.JAXBContextState contextState
-
-
Constructor Detail
-
JAXBContext
protected JAXBContext()
-
JAXBContext
protected JAXBContext(JAXBContext.JAXBContextInput contextInput) throws JAXBException
- Throws:
JAXBException
-
JAXBContext
public JAXBContext(XMLContext context)
Create a JAXBContext for a given XMLContext. The XMLContext contains the metadata about the Object to XML mappings.
-
JAXBContext
public JAXBContext(XMLContext context, Generator generator, java.lang.reflect.Type[] boundTypes)
Create a JAXBContext. The XMLContext contains the metadata about the Object to XML mappings.
-
JAXBContext
public JAXBContext(XMLContext context, Generator generator, TypeMappingInfo[] boundTypes)
Create a JAXBContext. The XMLContext contains the metadata about the Object to XML mappings.
-
-
Method Detail
-
getBeanValidationHelper
public BeanValidationHelper getBeanValidationHelper()
Returns BeanValidationHelper. Can return null if bean validation jar is not on class path.
-
getXMLInputFactory
public javax.xml.stream.XMLInputFactory getXMLInputFactory()
-
refreshMetadata
public void refreshMetadata() throws JAXBException
ADVANCED:Refresh the underlying metadata based on the inputs that were used to create the JAXBContext. This is particularly useful when using the virtual property mappings. The refreshMetadata call could be made in the following way:
org.eclipse.persistence.jaxb.JAXBHelper.getJAXBContext(aJAXBContext).refreshMetadata();
Note:- As instances of Binder maintain a cache, calling refreshMetadata will not affect instances of Binder. To get the new metadata you must create a new instance of Binder after the refresh metadata call has been made.
- Throws:
JAXBException
-
getXMLContext
public XMLContext getXMLContext()
Return the XMLContext associated with this JAXBContext.
-
setXMLContext
public void setXMLContext(XMLContext xmlContext)
-
generateSchema
public void generateSchema(SchemaOutputResolver outputResolver)
Generate a Schema for this JAXBContext- Overrides:
generateSchema
in classJAXBContext
- Parameters:
outputResolver
- Class that decides where the schema file (of the given namespace URI) will be written
-
generateJsonSchema
public void generateJsonSchema(SchemaOutputResolver outputResolver, java.lang.Class rootClass)
-
generateSchema
public void generateSchema(SchemaOutputResolver outputResolver, java.util.Map<javax.xml.namespace.QName,java.lang.reflect.Type> additonalGlobalElements)
Generate a Schema for this JAXBContext- Parameters:
outputResolver
- Class that decides where the schema file (of the given namespace URI) will be writtenadditonalGlobalElements
- Map of additional global elements to be added to the generated XSD. Note that if any QName in this map conflicts with another global element (for example from a TypeMappingInfo object) then the element generated from this map will be the one that is present in the XSD.
-
createMarshaller
public JAXBMarshaller createMarshaller() throws JAXBException
Create a JAXBMarshaller. The JAXBMarshaller is used to convert Java objects to XML.- Specified by:
createMarshaller
in classJAXBContext
- Returns:
- a
Marshaller
object - Throws:
JAXBException
- if an error was encountered while creating theMarshaller
object
-
createUnmarshaller
public JAXBUnmarshaller createUnmarshaller() throws JAXBException
Create a JAXBUnmarshaller. The JAXBUnmarshaller is used to convert XML into Java objects.- Specified by:
createUnmarshaller
in classJAXBContext
- Returns:
- an
Unmarshaller
object - Throws:
JAXBException
- if an error was encountered while creating theUnmarshaller
object
-
createValidator
public JAXBValidator createValidator()
Create a JAXBValidator. The JAXBValidator is used to validate Java objects against an XSD.- Specified by:
createValidator
in classJAXBContext
- Returns:
- a
Validator
object
-
createBinder
public JAXBBinder createBinder()
Create a JAXBBinder. The JAXBBinder is used to preserve unmapped XML Data.- Overrides:
createBinder
in classJAXBContext
- Returns:
- always a new valid
Binder
object.
-
createBinder
public <T> JAXBBinder createBinder(java.lang.Class<T> nodeClass)
Create a JAXBBinder. The JAXBBinder is used to preserve unmapped XML Data.- Overrides:
createBinder
in classJAXBContext
- Parameters:
nodeClass
- The DOM Node class to use- Returns:
- always a new valid
Binder
object.
-
createJAXBIntrospector
public JAXBIntrospector createJAXBIntrospector()
Creates a JAXBIntrospector object. The JAXBIntrospector allows the user to access certain pieces of metadata about an instance of a JAXB bound class.- Overrides:
createJAXBIntrospector
in classJAXBContext
- Returns:
- always return a non-null valid
JAXBIntrospector
object.
-
setQNameToGeneratedClasses
public void setQNameToGeneratedClasses(java.util.HashMap<javax.xml.namespace.QName,java.lang.Class> qNameToClass)
INTERNAL: Set the map containing which QName corresponds to which generated class.
-
getClassToGeneratedClasses
public java.util.Map<java.lang.String,java.lang.Class> getClassToGeneratedClasses()
INTERNAL: Get the map containing which Class (by name) corresponds to which generated class.
-
setClassToGeneratedClasses
public void setClassToGeneratedClasses(java.util.HashMap<java.lang.String,java.lang.Class> classToClass)
INTERNAL: Set the map containing which Class (by name) corresponds to which generated class.
-
applyORMMetadata
public void applyORMMetadata(org.eclipse.persistence.internal.sessions.AbstractSession ormSession)
ADVANCED: Adjust the OXM metadata to take into account ORM mapping metadata
-
getQNamesToDeclaredClasses
public java.util.Map<javax.xml.namespace.QName,java.lang.Class> getQNamesToDeclaredClasses()
INTERNAL: Get the map of which QName corresponds to which declared class.
-
setQNamesToDeclaredClasses
public void setQNamesToDeclaredClasses(java.util.HashMap<javax.xml.namespace.QName,java.lang.Class> nameToDeclaredClasses)
INTERNAL: Set the map of which QName corresponds to which declared class.
-
getArrayClassesToGeneratedClasses
public java.util.Map<java.lang.String,java.lang.Class> getArrayClassesToGeneratedClasses()
INTERNAL: Get the map for which array class (by name) corresponds to which generated class
-
getCollectionClassesToGeneratedClasses
public java.util.Map<java.lang.reflect.Type,java.lang.Class> getCollectionClassesToGeneratedClasses()
INTERNAL: Get the map for which collection class (by Type) corresponds to which generated class
-
initTypeToSchemaType
public void initTypeToSchemaType()
INTERNAL: Populate the map of which Type corresponds to which QName. The keys should be all the boundTypes used to create the JAXBContext. If the JAXBContext was not created with the constructor that takes a Type[] then this Map will be empty.
-
getTypeMappingInfoToSchemaType
public java.util.Map<TypeMappingInfo,javax.xml.namespace.QName> getTypeMappingInfoToSchemaType()
INTERNAL: Get the map of which TypeMappingInfo corresponds to which QName. The keys should be all the boundTypes used to create the JAXBContext. If the JAXBContext was not created with the constructor that takes a TypeMappingInfo[] this Map will be empty.
-
getTypeToSchemaType
public java.util.Map<java.lang.reflect.Type,javax.xml.namespace.QName> getTypeToSchemaType()
INTERNAL: Get the map of which Type corresponds to which QName. The keys should be all the boundTypes used to create the JAXBContext. If the JAXBContext was not created with the constructor that takes a Type[] then this Map will be empty.
-
getValueByXPath
public <T> T getValueByXPath(java.lang.Object object, java.lang.String xPath, NamespaceResolver namespaceResolver, java.lang.Class<T> returnType)
Get a value from an object based on an XPath statement.- Type Parameters:
T
- The return type of this method corresponds to the returnType parameter.- Parameters:
object
- The XPath will be executed relative to this object.xPath
- The XPath statement.namespaceResolver
- A NamespaceResolver containing the prefix/URI pairings from the XPath statement.returnType
- The return type.- Returns:
- The object corresponding to the XPath or null if no result was found.
-
setValueByXPath
public void setValueByXPath(java.lang.Object object, java.lang.String xPath, NamespaceResolver namespaceResolver, java.lang.Object value)
Set a value on an object based on an XPath statement.- Parameters:
object
- The XPath will be executed relative to this object.xPath
- The XPath statement.namespaceResolver
- A NamespaceResolver containing the prefix/URI pairings from the XPath statement.value
- The value to be set.
-
createByQualifiedName
public java.lang.Object createByQualifiedName(java.lang.String namespace, java.lang.String typeName, boolean isGlobalType)
Create a new object instance for a given XML namespace and name.- Parameters:
namespace
- The namespace of the complex type to create a new Java instance of.typeName
- The XML type name to create a new Java instance of.isGlobalType
- True if the object to be created represents a global type, false if it represents a global element.- Returns:
- An instance of the Java class mapped to the indicated XML type, or null if no result was found.
-
createByXPath
public <T> T createByXPath(java.lang.Object parentObject, java.lang.String xPath, NamespaceResolver namespaceResolver, java.lang.Class<T> returnType)
Create a new object instance for a given XPath, relative to the parentObject.- Type Parameters:
T
- The return type of this method corresponds to the returnType parameter.- Parameters:
parentObject
- The XPath will be executed relative to this object.xPath
- The XPath statement.namespaceResolver
- A NamespaceResolver containing the prefix/URI pairings from the XPath statement.returnType
- The return type.- Returns:
- An instance of the Java class mapped to the supplied XML type, or null if no result was found.
-
createObjectGraph
public ObjectGraph createObjectGraph(java.lang.Class type)
-
createObjectGraph
public ObjectGraph createObjectGraph(java.lang.String typeName)
-
createJAXBElementFromXMLRoot
protected JAXBElement createJAXBElementFromXMLRoot(org.eclipse.persistence.internal.oxm.Root xmlRoot, java.lang.Class declaredType)
-
createJAXBElement
protected JAXBElement createJAXBElement(javax.xml.namespace.QName qname, java.lang.Class theClass, java.lang.Object value)
-
hasSwaRef
public boolean hasSwaRef()
Returns true if any Object in this context contains a property annotated with an XmlAttachmentRef annotation.- Returns:
-
-