public class Jaxb2Marshaller extends Object implements MimeMarshaller, MimeUnmarshaller, GenericMarshaller, GenericUnmarshaller, org.springframework.beans.factory.BeanClassLoaderAware, org.springframework.beans.factory.InitializingBean
GenericMarshaller interface for JAXB 2.1/2.2,
as included in JDK 6 update 4+ and Java 7/8.
The typical usage will be to set either the "contextPath" or the "classesToBeBound" property on this bean, possibly customize the marshaller and unmarshaller by setting properties, schemas, adapters, and listeners, and to refer to it.
setContextPath(String),
setClassesToBeBound(Class[]),
setJaxbContextProperties(Map),
setMarshallerProperties(Map),
setUnmarshallerProperties(Map),
setSchema(Resource),
setSchemas(Resource[]),
setMarshallerListener(javax.xml.bind.Marshaller.Listener),
setUnmarshallerListener(javax.xml.bind.Unmarshaller.Listener),
setAdapters(XmlAdapter[])| Modifier and Type | Field and Description |
|---|---|
protected Log |
logger
Logger available to subclasses
|
| Constructor and Description |
|---|
Jaxb2Marshaller() |
| Modifier and Type | Method and Description |
|---|---|
void |
afterPropertiesSet() |
protected XmlMappingException |
convertJaxbException(JAXBException ex)
Convert the given
JAXBException to an appropriate exception from the
org.springframework.oxm hierarchy. |
protected Marshaller |
createMarshaller()
Return a newly created JAXB marshaller.
|
protected Unmarshaller |
createUnmarshaller()
Return a newly created JAXB unmarshaller.
|
Class<?>[] |
getClassesToBeBound()
Return the list of Java classes to be recognized by a newly created JAXBContext.
|
String |
getContextPath()
Return the JAXB context path.
|
JAXBContext |
getJaxbContext()
Return the JAXBContext used by this marshaller, lazily building it if necessary.
|
String[] |
getPackagesToScan()
Return the packages to search for JAXB2 annotations.
|
protected void |
initJaxbMarshaller(Marshaller marshaller)
Template method that can be overridden by concrete JAXB marshallers for custom initialization behavior.
|
protected void |
initJaxbUnmarshaller(Unmarshaller unmarshaller)
Template method that can be overridden by concrete JAXB marshallers for custom initialization behavior.
|
boolean |
isProcessExternalEntities() |
void |
marshal(Object graph,
Result result)
Marshals the object graph with the given root into the provided
Result. |
void |
marshal(Object graph,
Result result,
MimeContainer mimeContainer)
Marshals the object graph with the given root into the provided
Result,
writing binary data to a MimeContainer. |
void |
setAdapters(XmlAdapter<?,?>... adapters)
Specify the
XmlAdapters to be registered with the JAXB Marshaller
and Unmarshaller |
void |
setBeanClassLoader(ClassLoader classLoader) |
void |
setCheckForXmlRootElement(boolean checkForXmlRootElement)
Specify whether the
supports(Class) should check for
@XmlRootElement annotations. |
void |
setClassesToBeBound(Class<?>... classesToBeBound)
Set the list of Java classes to be recognized by a newly created JAXBContext.
|
void |
setContextPath(String contextPath)
Set a JAXB context path.
|
void |
setContextPaths(String... contextPaths)
Set multiple JAXB context paths.
|
void |
setJaxbContextProperties(Map<String,?> jaxbContextProperties)
Set the
JAXBContext properties. |
void |
setLazyInit(boolean lazyInit)
Set whether to lazily initialize the
JAXBContext for this marshaller. |
void |
setMappedClass(Class<?> mappedClass)
Specify a JAXB mapped class for partial unmarshalling.
|
void |
setMarshallerListener(Marshaller.Listener marshallerListener)
Specify the
Marshaller.Listener to be registered with the JAXB Marshaller. |
void |
setMarshallerProperties(Map<String,?> properties)
Set the JAXB
Marshaller properties. |
void |
setMtomEnabled(boolean mtomEnabled)
Specify whether MTOM support should be enabled or not.
|
void |
setPackagesToScan(String[] packagesToScan)
Set the packages to search for classes with JAXB2 annotations in the classpath.
|
void |
setProcessExternalEntities(boolean processExternalEntities)
Indicates whether external XML entities are processed when unmarshalling.
|
void |
setSchema(org.springframework.core.io.Resource schemaResource)
Set the schema resource to use for validation.
|
void |
setSchemaLanguage(String schemaLanguage)
Set the schema language.
|
void |
setSchemaResourceResolver(LSResourceResolver schemaResourceResolver)
Set the resource resolver, as used to load the schema resources.
|
void |
setSchemas(org.springframework.core.io.Resource... schemaResources)
Set the schema resources to use for validation.
|
void |
setSupportJaxbElementClass(boolean supportJaxbElementClass)
|
void |
setUnmarshallerListener(Unmarshaller.Listener unmarshallerListener)
Set the
Unmarshaller.Listener to be registered with the JAXB Unmarshaller. |
void |
setUnmarshallerProperties(Map<String,?> properties)
Set the JAXB
Unmarshaller properties. |
void |
setValidationEventHandler(ValidationEventHandler validationEventHandler)
Set the JAXB validation event handler.
|
boolean |
supports(Class<?> clazz)
Indicates whether this marshaller can marshal instances of the supplied type.
|
boolean |
supports(Type genericType)
Indicates whether this marshaller can marshal instances of the supplied generic type.
|
Object |
unmarshal(Source source)
Unmarshals the given
Source into an object graph. |
Object |
unmarshal(Source source,
MimeContainer mimeContainer)
Unmarshals the given provided
Source into an object graph,
reading binary attachments from a MimeContainer. |
protected Object |
unmarshalStaxSource(Unmarshaller jaxbUnmarshaller,
Source staxSource) |
protected final Log logger
public void setContextPaths(String... contextPaths)
public void setContextPath(String contextPath)
Setting either this property, "classesToBeBound"
or "packagesToScan" is required.
public String getContextPath()
public void setClassesToBeBound(Class<?>... classesToBeBound)
Setting either this property, "contextPath"
or "packagesToScan" is required.
public Class<?>[] getClassesToBeBound()
public void setPackagesToScan(String[] packagesToScan)
org.springframework.context.annotation.ClassPathBeanDefinitionScanner).
Setting either this property, "contextPath"
or "classesToBeBound" is required.
public String[] getPackagesToScan()
public void setJaxbContextProperties(Map<String,?> jaxbContextProperties)
JAXBContext properties. These implementation-specific
properties will be set on the underlying JAXBContext.public void setMarshallerProperties(Map<String,?> properties)
Marshaller properties. These properties will be set on the
underlying JAXB Marshaller, and allow for features such as indentation.properties - the propertiesMarshaller.setProperty(String, Object),
Marshaller.JAXB_ENCODING,
Marshaller.JAXB_FORMATTED_OUTPUT,
Marshaller.JAXB_NO_NAMESPACE_SCHEMA_LOCATION,
Marshaller.JAXB_SCHEMA_LOCATIONpublic void setUnmarshallerProperties(Map<String,?> properties)
Unmarshaller properties. These properties will be set on the
underlying JAXB Unmarshaller.properties - the propertiesUnmarshaller.setProperty(String, Object)public void setMarshallerListener(Marshaller.Listener marshallerListener)
Marshaller.Listener to be registered with the JAXB Marshaller.public void setUnmarshallerListener(Unmarshaller.Listener unmarshallerListener)
Unmarshaller.Listener to be registered with the JAXB Unmarshaller.public void setValidationEventHandler(ValidationEventHandler validationEventHandler)
public void setAdapters(XmlAdapter<?,?>... adapters)
XmlAdapters to be registered with the JAXB Marshaller
and Unmarshallerpublic void setSchema(org.springframework.core.io.Resource schemaResource)
public void setSchemas(org.springframework.core.io.Resource... schemaResources)
public void setSchemaLanguage(String schemaLanguage)
http://www.w3.org/2001/XMLSchema".public void setSchemaResourceResolver(LSResourceResolver schemaResourceResolver)
public void setLazyInit(boolean lazyInit)
JAXBContext for this marshaller.
Default is false to initialize on startup; can be switched to true.
Early initialization just applies if afterPropertiesSet() is called.
public void setMtomEnabled(boolean mtomEnabled)
false: marshalling using XOP/MTOM not being enabled.public void setSupportJaxbElementClass(boolean supportJaxbElementClass)
supports(Class) returns true for the JAXBElement class.
Default is false, meaning that supports(Class) always returns false for
JAXBElement classes (though supports(Type) can return true, since it can
obtain the type parameters of JAXBElement).
This property is typically enabled in combination with usage of classes like
MarshallingView,
since the ModelAndView does not offer type parameter information at runtime.
supports(Class),
supports(Type)public void setCheckForXmlRootElement(boolean checkForXmlRootElement)
supports(Class) should check for
@XmlRootElement annotations.
Default is true, meaning that supports(Class) will check for
this annotation. However, some JAXB implementations (i.e. EclipseLink MOXy) allow
for defining the bindings in an external definition file, thus keeping the classes
annotations free. Setting this property to false supports these
JAXB implementations.
supports(Class),
supports(Type)public void setMappedClass(Class<?> mappedClass)
public void setProcessExternalEntities(boolean processExternalEntities)
Default is false, meaning that external entities are not resolved.
Note that processing of external entities will only be enabled/disabled when the
Source passed to unmarshal(Source) is a SAXSource or
StreamSource. It has no effect for DOMSource or StAXSource
instances.
public boolean isProcessExternalEntities()
public void setBeanClassLoader(ClassLoader classLoader)
setBeanClassLoader in interface org.springframework.beans.factory.BeanClassLoaderAwarepublic void afterPropertiesSet()
throws Exception
afterPropertiesSet in interface org.springframework.beans.factory.InitializingBeanExceptionpublic JAXBContext getJaxbContext()
public boolean supports(Class<?> clazz)
Marshallersupports in interface Marshallersupports in interface Unmarshallerclazz - the class that this marshaller is being asked if it can marshaltrue if this marshaller can indeed marshal instances of the supplied class;
false otherwisepublic boolean supports(Type genericType)
GenericMarshallersupports in interface GenericMarshallersupports in interface GenericUnmarshallergenericType - the type that this marshaller is being asked if it can marshaltrue if this marshaller can indeed marshal instances of the supplied type;
false otherwisepublic void marshal(Object graph, Result result) throws XmlMappingException
MarshallerResult.marshal in interface Marshallergraph - the root of the object graph to marshalresult - the result to marshal toXmlMappingException - if the given object cannot be marshalled to the resultpublic void marshal(Object graph, Result result, MimeContainer mimeContainer) throws XmlMappingException
MimeMarshallerResult,
writing binary data to a MimeContainer.marshal in interface MimeMarshallergraph - the root of the object graph to marshalresult - the result to marshal tomimeContainer - the MIME container to write extracted binary content toXmlMappingException - if the given object cannot be marshalled to the resultprotected Marshaller createMarshaller()
protected void initJaxbMarshaller(Marshaller marshaller) throws JAXBException
Marshaller, and after the respective properties have been set.
The default implementation sets the defined properties, the validation event handler, the schemas, listener, and
adapters.
JAXBExceptionpublic Object unmarshal(Source source) throws XmlMappingException
UnmarshallerSource into an object graph.unmarshal in interface Unmarshallersource - the source to marshal fromXmlMappingException - if the given source cannot be mapped to an objectpublic Object unmarshal(Source source, MimeContainer mimeContainer) throws XmlMappingException
MimeUnmarshallerSource into an object graph,
reading binary attachments from a MimeContainer.unmarshal in interface MimeUnmarshallersource - the source to marshal frommimeContainer - the MIME container to read extracted binary content fromXmlMappingException - if the given source cannot be mapped to an objectprotected Object unmarshalStaxSource(Unmarshaller jaxbUnmarshaller, Source staxSource) throws JAXBException
JAXBExceptionprotected Unmarshaller createUnmarshaller()
protected void initJaxbUnmarshaller(Unmarshaller unmarshaller) throws JAXBException
Marshaller, and after the respective properties have been set.
The default implementation sets the defined properties, the validation event handler, the schemas, listener, and
adapters.
JAXBExceptionprotected XmlMappingException convertJaxbException(JAXBException ex)
JAXBException to an appropriate exception from the
org.springframework.oxm hierarchy.ex - JAXBException that occuredXmlMappingException