Class ClassResolver
THIS INTERFACE IS SUBJECT TO CHANGE WITHOUT NOTICE.
Background
JAXBContext.newInstance(Class...) requires that application informs JAXB
about all the classes that it may see in the instance document. While this allows
JAXB to take time to optimize the unmarshalling, it is sometimes inconvenient
for applications.
This is where ClassResolver comes to resucue.
A ClassResolver instance can be specified on Unmarshaller via
Unmarshaller.setProperty(String, Object) as follows:
unmarshaller.setProperty( ClassResolver.class.getName(), new MyClassResolverImpl() );
When an Unmarshaller encounters (i) an unknown root element or (ii) unknown
elements where unmarshaller is trying to unmarshal into XmlAnyElement with
lax=true, unmarshaller calls resolveElementName(String, String)
method to see if the application may be able to supply a class that corresponds
to that class.
When a Class is returned, a new JAXBContext is created with
all the classes known to it so far, plus a new class returned. This operation
may fail (for example because of some conflicting annotations.) This failure
is handled just like Exceptions thrown from
resolveElementName(String, String).
- Since:
- 2.1
- Author:
- Kohsuke Kawaguchi
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionabstract Class<?>resolveElementName(String nsUri, String localName) JAXB calls this method when it sees an unknown element.
-
Constructor Details
-
ClassResolver
public ClassResolver()
-
-
Method Details
-
resolveElementName
@Nullable public abstract Class<?> resolveElementName(@NotNull String nsUri, @NotNull String localName) throws Exception JAXB calls this method when it sees an unknown element.See the class javadoc for details.
- Parameters:
nsUri- Namespace URI of the unknown element. Can be empty but never null.localName- Local name of the unknown element. Never be empty nor null.- Returns:
- If a non-null class is returned, it will be used to unmarshal this element.
If null is returned, the resolution is assumed to be failed, and
the unmarshaller will behave as if there was no
ClassResolverto begin with (that is, to report it toValidationEventHandler, then move on.) - Throws:
Exception- Throwing anyRuntimeExceptioncauses the unmarshaller to stop immediately. The exception will be propagated up the call stack. Throwing any other checkedExceptionresults in the error reproted toValidationEventHandler(just like any other error during the unmarshalling.)
-