Optional @XmlRootElement check in Jaxb2Marshaller
Before this commit, the Jaxb2Marshaller required all supported classes to be annotated with @XmlRootElement. This commit adds a property 'checkForXmlRootElement' (default is true) which allows for un-annotated classes. This is especially useful for JAXB2 implementations that can use external binding files, such as EclipseLink MOXy. Issue: SPR-9757
This commit is contained in:
parent
6517517ca9
commit
bd018fc9d7
|
@ -168,6 +168,8 @@ public class Jaxb2Marshaller
|
||||||
|
|
||||||
private boolean supportJaxbElementClass = false;
|
private boolean supportJaxbElementClass = false;
|
||||||
|
|
||||||
|
private boolean checkForXmlRootElement = true;
|
||||||
|
|
||||||
private LSResourceResolver schemaResourceResolver;
|
private LSResourceResolver schemaResourceResolver;
|
||||||
|
|
||||||
|
|
||||||
|
@ -358,6 +360,21 @@ public class Jaxb2Marshaller
|
||||||
this.supportJaxbElementClass = supportJaxbElementClass;
|
this.supportJaxbElementClass = supportJaxbElementClass;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Specify whether the {@link #supports(Class)} should check for
|
||||||
|
* {@link XmlRootElement @XmlRootElement} annotations.
|
||||||
|
* <p>Default is {@code true}, meaning that {@code 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 {@code false} supports these
|
||||||
|
* JAXB implementations.
|
||||||
|
* @see #supports(Class)
|
||||||
|
* @see #supports(Type)
|
||||||
|
*/
|
||||||
|
public void setCheckForXmlRootElement(boolean checkForXmlRootElement) {
|
||||||
|
this.checkForXmlRootElement = checkForXmlRootElement;
|
||||||
|
}
|
||||||
|
|
||||||
public void setBeanClassLoader(ClassLoader classLoader) {
|
public void setBeanClassLoader(ClassLoader classLoader) {
|
||||||
this.beanClassLoader = classLoader;
|
this.beanClassLoader = classLoader;
|
||||||
}
|
}
|
||||||
|
@ -492,7 +509,7 @@ public class Jaxb2Marshaller
|
||||||
if (this.supportJaxbElementClass && JAXBElement.class.isAssignableFrom(clazz)) {
|
if (this.supportJaxbElementClass && JAXBElement.class.isAssignableFrom(clazz)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return supportsInternal(clazz, true);
|
return supportsInternal(clazz, this.checkForXmlRootElement);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean supports(Type genericType) {
|
public boolean supports(Type genericType) {
|
||||||
|
@ -521,7 +538,7 @@ public class Jaxb2Marshaller
|
||||||
}
|
}
|
||||||
else if (genericType instanceof Class) {
|
else if (genericType instanceof Class) {
|
||||||
Class<?> clazz = (Class<?>) genericType;
|
Class<?> clazz = (Class<?>) genericType;
|
||||||
return supportsInternal(clazz, true);
|
return supportsInternal(clazz, this.checkForXmlRootElement);
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue