Class Jaxb2Marshaller
- java.lang.Object
- org.springframework.oxm.jaxb.Jaxb2Marshaller
- All Implemented Interfaces:
Aware,BeanClassLoaderAware,InitializingBean,GenericMarshaller,GenericUnmarshaller,Marshaller,MimeMarshaller,MimeUnmarshaller,Unmarshaller
public class Jaxb2Marshaller extends Object implements MimeMarshaller, MimeUnmarshaller, GenericMarshaller, GenericUnmarshaller, BeanClassLoaderAware, InitializingBean
Implementation of theGenericMarshallerinterface for JAXB 2.2.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.
- Since:
- 3.0
- Author:
- Arjen Poutsma, Juergen Hoeller, Rossen Stoyanchev
- See Also:
setContextPath(java.lang.String),setClassesToBeBound(java.lang.Class<?>...),setJaxbContextProperties(java.util.Map<java.lang.String, ?>),setMarshallerProperties(java.util.Map<java.lang.String, ?>),setUnmarshallerProperties(java.util.Map<java.lang.String, ?>),setSchema(org.springframework.core.io.Resource),setSchemas(org.springframework.core.io.Resource...),setMarshallerListener(javax.xml.bind.Marshaller.Listener),setUnmarshallerListener(javax.xml.bind.Unmarshaller.Listener),setAdapters(javax.xml.bind.annotation.adapters.XmlAdapter<?, ?>...)
Constructor Summary
Constructors Constructor Description Jaxb2Marshaller()
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidafterPropertiesSet()Invoked by the containingBeanFactoryafter it has set all bean properties and satisfiedBeanFactoryAware,ApplicationContextAwareetc.protected XmlMappingExceptionconvertJaxbException(JAXBException ex)Convert the givenJAXBExceptionto an appropriate exception from theorg.springframework.oxmhierarchy.MarshallercreateMarshaller()Return a newly created JAXB marshaller.UnmarshallercreateUnmarshaller()Return a newly created JAXB unmarshaller.Class<?>[]getClassesToBeBound()Return the list of Java classes to be recognized by a newly created JAXBContext.StringgetContextPath()Return the JAXB context path.JAXBContextgetJaxbContext()Return the JAXBContext used by this marshaller, lazily building it if necessary.String[]getPackagesToScan()Return the packages to search for JAXB2 annotations.protected voidinitJaxbMarshaller(Marshaller marshaller)Template method that can be overridden by concrete JAXB marshallers for custom initialization behavior.protected voidinitJaxbUnmarshaller(Unmarshaller unmarshaller)Template method that can be overridden by concrete JAXB marshallers for custom initialization behavior.booleanisProcessExternalEntities()Return whether XML external entities are allowed.booleanisSupportDtd()Return whether DTD parsing is supported.voidmarshal(Object graph, Result result)Marshal the object graph with the given root into the providedResult.voidmarshal(Object graph, Result result, MimeContainer mimeContainer)Marshals the object graph with the given root into the providedResult, writing binary data to aMimeContainer.voidsetAdapters(XmlAdapter<?,?>... adapters)Specify theXmlAdapters to be registered with the JAXBMarshallerandUnmarshaller.voidsetBeanClassLoader(ClassLoader classLoader)Callback that supplies the beanclass loaderto a bean instance.voidsetCheckForXmlRootElement(boolean checkForXmlRootElement)Specify whether thesupports(Class)should check for@XmlRootElementannotations.voidsetClassesToBeBound(Class<?>... classesToBeBound)Set the list of Java classes to be recognized by a newly created JAXBContext.voidsetContextPath(String contextPath)Set a JAXB context path.voidsetContextPaths(String... contextPaths)Set multiple JAXB context paths.voidsetJaxbContextProperties(Map<String,?> jaxbContextProperties)Set theJAXBContextproperties.voidsetLazyInit(boolean lazyInit)Set whether to lazily initialize theJAXBContextfor this marshaller.voidsetMappedClass(Class<?> mappedClass)Specify a JAXB mapped class for partial unmarshalling.voidsetMarshallerListener(Marshaller.Listener marshallerListener)Specify theMarshaller.Listenerto be registered with the JAXBMarshaller.voidsetMarshallerProperties(Map<String,?> properties)Set the JAXBMarshallerproperties.voidsetMtomEnabled(boolean mtomEnabled)Specify whether MTOM support should be enabled or not.voidsetPackagesToScan(String... packagesToScan)Set the packages to search for classes with JAXB2 annotations in the classpath.voidsetProcessExternalEntities(boolean processExternalEntities)Indicate whether external XML entities are processed when unmarshalling.voidsetSchema(Resource schemaResource)Set the schema resource to use for validation.voidsetSchemaLanguage(String schemaLanguage)Set the schema language.voidsetSchemaResourceResolver(LSResourceResolver schemaResourceResolver)Set the resource resolver, as used to load the schema resources.voidsetSchemas(Resource... schemaResources)Set the schema resources to use for validation.voidsetSupportDtd(boolean supportDtd)Indicate whether DTD parsing should be supported.voidsetSupportJaxbElementClass(boolean supportJaxbElementClass)voidsetUnmarshallerListener(Unmarshaller.Listener unmarshallerListener)Set theUnmarshaller.Listenerto be registered with the JAXBUnmarshaller.voidsetUnmarshallerProperties(Map<String,?> properties)Set the JAXBUnmarshallerproperties.voidsetValidationEventHandler(ValidationEventHandler validationEventHandler)Set the JAXB validation event handler.booleansupports(Class<?> clazz)Indicate whether this marshaller can marshal instances of the supplied type.booleansupports(Type genericType)Indicates whether this marshaller can marshal instances of the supplied generic type.Objectunmarshal(Source source)Unmarshal the givenSourceinto an object graph.Objectunmarshal(Source source, MimeContainer mimeContainer)Unmarshals the given providedSourceinto an object graph, reading binary attachments from aMimeContainer.protected ObjectunmarshalStaxSource(Unmarshaller jaxbUnmarshaller, Source staxSource)
Constructor Detail
Jaxb2Marshaller
public Jaxb2Marshaller()
Method Detail
setContextPaths
public void setContextPaths(String... contextPaths)
Set multiple JAXB context paths. The given array of context paths gets converted to a colon-delimited string, as supported by JAXB.
setContextPath
public void setContextPath(@Nullable String contextPath)
Set a JAXB context path.Setting either this property,
"classesToBeBound"or"packagesToScan"is required.
getContextPath
@Nullable public String getContextPath()
Return the JAXB context path.
setClassesToBeBound
public void setClassesToBeBound(@Nullable Class<?>... classesToBeBound)
Set the list of Java classes to be recognized by a newly created JAXBContext.Setting either this property,
"contextPath"or"packagesToScan"is required.
getClassesToBeBound
@Nullable public Class<?>[] getClassesToBeBound()
Return the list of Java classes to be recognized by a newly created JAXBContext.
setPackagesToScan
public void setPackagesToScan(@Nullable String... packagesToScan)
Set the packages to search for classes with JAXB2 annotations in the classpath. This is using a Spring-bases search and therefore analogous to Spring's component-scan feature (ClassPathBeanDefinitionScanner).Setting either this property,
"contextPath"or"classesToBeBound"is required.
getPackagesToScan
@Nullable public String[] getPackagesToScan()
Return the packages to search for JAXB2 annotations.
setJaxbContextProperties
public void setJaxbContextProperties(Map<String,?> jaxbContextProperties)
Set theJAXBContextproperties. These implementation-specific properties will be set on the underlyingJAXBContext.
setMarshallerProperties
public void setMarshallerProperties(Map<String,?> properties)
Set the JAXBMarshallerproperties.These properties will be set on the underlying JAXB
Marshaller, and allow for features such as indentation.- Parameters:
properties- the properties- See Also:
Marshaller.setProperty(String, Object),Marshaller.JAXB_ENCODING,Marshaller.JAXB_FORMATTED_OUTPUT,Marshaller.JAXB_NO_NAMESPACE_SCHEMA_LOCATION,Marshaller.JAXB_SCHEMA_LOCATION
setUnmarshallerProperties
public void setUnmarshallerProperties(Map<String,?> properties)
Set the JAXBUnmarshallerproperties.These properties will be set on the underlying JAXB
Unmarshaller.- Parameters:
properties- the properties- See Also:
Unmarshaller.setProperty(String, Object)
setMarshallerListener
public void setMarshallerListener(Marshaller.Listener marshallerListener)
Specify theMarshaller.Listenerto be registered with the JAXBMarshaller.
setUnmarshallerListener
public void setUnmarshallerListener(Unmarshaller.Listener unmarshallerListener)
Set theUnmarshaller.Listenerto be registered with the JAXBUnmarshaller.
setValidationEventHandler
public void setValidationEventHandler(ValidationEventHandler validationEventHandler)
Set the JAXB validation event handler. This event handler will be called by JAXB if any validation errors are encountered during calls to any of the marshal APIs.
setAdapters
public void setAdapters(XmlAdapter<?,?>... adapters)
Specify theXmlAdapters to be registered with the JAXBMarshallerandUnmarshaller.
setSchema
public void setSchema(Resource schemaResource)
Set the schema resource to use for validation.
setSchemas
public void setSchemas(Resource... schemaResources)
Set the schema resources to use for validation.
setSchemaLanguage
public void setSchemaLanguage(String schemaLanguage)
Set the schema language. Default is the W3C XML Schema:http://www.w3.org/2001/XMLSchema".
setSchemaResourceResolver
public void setSchemaResourceResolver(LSResourceResolver schemaResourceResolver)
Set the resource resolver, as used to load the schema resources.
setLazyInit
public void setLazyInit(boolean lazyInit)
Set whether to lazily initialize theJAXBContextfor this marshaller. Default isfalseto initialize on startup; can be switched totrue.Early initialization just applies if
afterPropertiesSet()is called.
setMtomEnabled
public void setMtomEnabled(boolean mtomEnabled)
Specify whether MTOM support should be enabled or not. Default isfalse: marshalling using XOP/MTOM not being enabled.
setSupportJaxbElementClass
public void setSupportJaxbElementClass(boolean supportJaxbElementClass)
Specify whether thesupports(Class)returnstruefor theJAXBElementclass.Default is
false, meaning thatsupports(Class)always returnsfalseforJAXBElementclasses (thoughsupports(Type)can returntrue, since it can obtain the type parameters ofJAXBElement).This property is typically enabled in combination with usage of classes like
MarshallingView, since theModelAndViewdoes not offer type parameter information at runtime.- See Also:
supports(Class),supports(Type)
setCheckForXmlRootElement
public void setCheckForXmlRootElement(boolean checkForXmlRootElement)
Specify whether thesupports(Class)should check for@XmlRootElementannotations.Default is
true, meaning thatsupports(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 tofalsesupports these JAXB implementations.- See Also:
supports(Class),supports(Type)
setMappedClass
public void setMappedClass(Class<?> mappedClass)
Specify a JAXB mapped class for partial unmarshalling.
setSupportDtd
public void setSupportDtd(boolean supportDtd)
Indicate whether DTD parsing should be supported.Default is
falsemeaning that DTD is disabled.
isSupportDtd
public boolean isSupportDtd()
Return whether DTD parsing is supported.
setProcessExternalEntities
public void setProcessExternalEntities(boolean processExternalEntities)
Indicate whether external XML entities are processed when unmarshalling.Default is
false, meaning that external entities are not resolved. Note that processing of external entities will only be enabled/disabled when theSourcepassed tounmarshal(Source)is aSAXSourceorStreamSource. It has no effect forDOMSourceorStAXSourceinstances.Note: setting this option to
truealso automatically setssetSupportDtd(boolean)totrue.
isProcessExternalEntities
public boolean isProcessExternalEntities()
Return whether XML external entities are allowed.
setBeanClassLoader
public void setBeanClassLoader(ClassLoader classLoader)
Description copied from interface:BeanClassLoaderAwareCallback that supplies the beanclass loaderto a bean instance.Invoked after the population of normal bean properties but before an initialization callback such as
InitializingBean'sInitializingBean.afterPropertiesSet()method or a custom init-method.- Specified by:
setBeanClassLoaderin interfaceBeanClassLoaderAware- Parameters:
classLoader- the owning class loader
afterPropertiesSet
public void afterPropertiesSet() throws Exception
Description copied from interface:InitializingBeanInvoked by the containingBeanFactoryafter it has set all bean properties and satisfiedBeanFactoryAware,ApplicationContextAwareetc.This method allows the bean instance to perform validation of its overall configuration and final initialization when all bean properties have been set.
- Specified by:
afterPropertiesSetin interfaceInitializingBean- Throws:
Exception- in the event of misconfiguration (such as failure to set an essential property) or if initialization fails for any other reason
getJaxbContext
public JAXBContext getJaxbContext()
Return the JAXBContext used by this marshaller, lazily building it if necessary.
supports
public boolean supports(Class<?> clazz)
Description copied from interface:MarshallerIndicate whether this marshaller can marshal instances of the supplied type.- Specified by:
supportsin interfaceMarshaller- Specified by:
supportsin interfaceUnmarshaller- Parameters:
clazz- the class that this marshaller is being asked if it can marshal- Returns:
trueif this marshaller can indeed marshal instances of the supplied class;falseotherwise
supports
public boolean supports(Type genericType)
Description copied from interface:GenericMarshallerIndicates whether this marshaller can marshal instances of the supplied generic type.- Specified by:
supportsin interfaceGenericMarshaller- Specified by:
supportsin interfaceGenericUnmarshaller- Parameters:
genericType- the type that this marshaller is being asked if it can marshal- Returns:
trueif this marshaller can indeed marshal instances of the supplied type;falseotherwise
marshal
public void marshal(Object graph, Result result) throws XmlMappingException
Description copied from interface:MarshallerMarshal the object graph with the given root into the providedResult.- Specified by:
marshalin interfaceMarshaller- Parameters:
graph- the root of the object graph to marshalresult- the result to marshal to- Throws:
XmlMappingException- if the given object cannot be marshalled to the result
marshal
public void marshal(Object graph, Result result, @Nullable MimeContainer mimeContainer) throws XmlMappingException
Description copied from interface:MimeMarshallerMarshals the object graph with the given root into the providedResult, writing binary data to aMimeContainer.- Specified by:
marshalin interfaceMimeMarshaller- Parameters:
graph- the root of the object graph to marshalresult- the result to marshal tomimeContainer- the MIME container to write extracted binary content to- Throws:
XmlMappingException- if the given object cannot be marshalled to the result
createMarshaller
public Marshaller createMarshaller()
Return a newly created JAXB marshaller.Note: JAXB marshallers are not necessarily thread-safe. This method is public as of 5.2.
- Since:
- 5.2
- See Also:
createUnmarshaller()
initJaxbMarshaller
protected void initJaxbMarshaller(Marshaller marshaller) throws JAXBException
Template method that can be overridden by concrete JAXB marshallers for custom initialization behavior. Gets called after creation of JAXBMarshaller, and after the respective properties have been set.The default implementation sets the
defined properties, thevalidation event handler, theschemas,listener, andadapters.- Throws:
JAXBException
unmarshal
public Object unmarshal(Source source) throws XmlMappingException
Description copied from interface:UnmarshallerUnmarshal the givenSourceinto an object graph.- Specified by:
unmarshalin interfaceUnmarshaller- Parameters:
source- the source to marshal from- Returns:
- the object graph
- Throws:
XmlMappingException- if the given source cannot be mapped to an object
unmarshal
public Object unmarshal(Source source, @Nullable MimeContainer mimeContainer) throws XmlMappingException
Description copied from interface:MimeUnmarshallerUnmarshals the given providedSourceinto an object graph, reading binary attachments from aMimeContainer.- Specified by:
unmarshalin interfaceMimeUnmarshaller- Parameters:
source- the source to marshal frommimeContainer- the MIME container to read extracted binary content from- Returns:
- the object graph
- Throws:
XmlMappingException- if the given source cannot be mapped to an object
createUnmarshaller
public Unmarshaller createUnmarshaller()
Return a newly created JAXB unmarshaller.Note: JAXB unmarshallers are not necessarily thread-safe. This method is public as of 5.2.
- Since:
- 5.2
- See Also:
createMarshaller()
unmarshalStaxSource
protected Object unmarshalStaxSource(Unmarshaller jaxbUnmarshaller, Source staxSource) throws JAXBException
- Throws:
JAXBException
initJaxbUnmarshaller
protected void initJaxbUnmarshaller(Unmarshaller unmarshaller) throws JAXBException
Template method that can be overridden by concrete JAXB marshallers for custom initialization behavior. Gets called after creation of JAXBMarshaller, and after the respective properties have been set.The default implementation sets the
defined properties, thevalidation event handler, theschemas,listener, andadapters.- Throws:
JAXBException
convertJaxbException
protected XmlMappingException convertJaxbException(JAXBException ex)
Convert the givenJAXBExceptionto an appropriate exception from theorg.springframework.oxmhierarchy.- Parameters:
ex-JAXBExceptionthat occurred- Returns:
- the corresponding
XmlMappingException