Class JaxBeanInfo<BeanT>
- Direct Known Subclasses:
ClassBeanInfoImpl
,CompositeStructureBeanInfo
,ElementBeanInfoImpl
Each JAXB-bound class has a corresponding JaxBeanInfo
object,
which performs all the JAXB related operations on behalf of
the JAXB-bound object.
Given a class, the corresponding JaxBeanInfo
can be located
via JAXBContextImpl.getBeanInfo(Class,boolean)
.
Typically, JaxBeanInfo
implementations should be generated
by XJC/JXC. Those impl classes will register themselves to their
master ObjectFactory
class.
The type parameter BeanT is the Java class of the bean that this represents.
- Author:
- Kohsuke Kawaguchi (kohsuke.kawaguchi@sun.com)
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected short
Various boolean flags combined into one field to improve memory footprint.protected boolean
Gets the JAXB bound class type that thisJaxBeanInfo
handles. -
Constructor Summary
ConstructorsModifierConstructorDescriptionprotected
JaxBeanInfo
(JAXBContextImpl grammar, RuntimeTypeInfo rti, Class<BeanT> jaxbType, boolean isElement, boolean isImmutable, boolean hasLifecycleEvents) ForJaxBeanInfo
that has no type names.protected
JaxBeanInfo
(JAXBContextImpl grammar, RuntimeTypeInfo rti, Class<BeanT> jaxbType, QName[] typeNames, boolean isElement, boolean isImmutable, boolean hasLifecycleEvents) ForJaxBeanInfo
that has multiple type names.protected
JaxBeanInfo
(JAXBContextImpl grammar, RuntimeTypeInfo rti, Class<BeanT> jaxbType, QName typeName, boolean isElement, boolean isImmutable, boolean hasLifecycleEvents) ForJaxBeanInfo
that has one type name. -
Method Summary
Modifier and TypeMethodDescriptionabstract BeanT
createInstance
(UnmarshallingContext context) Creates a new instance of the bean.abstract String
Returns the local name portion of the element name, if the bean that this class represents is mapped from/to an XML element.abstract String
Returns the namespace URI portion of the element name, if the bean that this class represents is mapped from/to an XML element.abstract String
getId
(BeanT o, XMLSerializer target) Gets the ID value of the given bean, if it has an ID value.final com.sun.xml.bind.v2.runtime.LifecycleMethods
Return the LifecycleMethods cache for this ClassBeanInfo's corresponding jaxbType if it exists, else return null.abstract Loader
getLoader
(JAXBContextImpl context, boolean typeSubstitutionCapable) Gets theLoader
that will unmarshall the given object.abstract Transducer
<BeanT> If the bean's representation in XML is just a text, this method return aTransducer
that lets you convert values between the text and the bean.getTypeName
(BeanT instance) Returns the XML type name to be used to marshal the specified instance.Returns XML Schema type names if the bean is mapped from a complex/simple type of XML Schema.final boolean
True ifjaxbType
has the lifecycle method.final boolean
True ifjaxbType
has the lifecycle method.final boolean
True ifjaxbType
has the lifecycle method.final boolean
True ifjaxbType
has the lifecycle method.final boolean
True if this bean has an element-only content model.protected final void
hasElementOnlyContentModel
(boolean value) True if this bean has an element-only content model.final void
invokeAfterUnmarshalMethod
(UnmarshallerImpl unm, Object child, Object parent) Invokes the afterUnmarshal method if applicable.final void
invokeBeforeUnmarshalMethod
(UnmarshallerImpl unm, Object child, Object parent) Invokes the beforeUnmarshal method if applicable.final boolean
Returns true if the bean is mapped to/from an XML element.final boolean
Returns true if the bean is immutable.boolean
protected void
link
(JAXBContextImpl grammar) Called after all theJaxBeanInfo
s are created.boolean
This method is used to determine which of the sub-classes should be interrogated for the existence of lifecycle methods.abstract boolean
reset
(BeanT o, UnmarshallingContext context) Resets the object to the initial state, as if the object is created fresh.abstract void
serializeAttributes
(BeanT o, XMLSerializer target) Serializes attributes into the specified target.abstract void
serializeBody
(BeanT o, XMLSerializer target) Serializes child elements and texts into the specified target.abstract void
serializeRoot
(BeanT o, XMLSerializer target) Serializes the bean as the root element.abstract void
serializeURIs
(BeanT o, XMLSerializer target) Declares all the namespace URIs this object is using at its top-level scope into the specified target.protected final void
use reflection to determine which of the 4 object lifecycle methods exist on the JAXB bound type.void
wrapUp()
Called at the end of theJAXBContext
initialization phase to clean up any unnecessary references.
-
Field Details
-
isNilIncluded
protected boolean isNilIncluded -
flag
protected short flagVarious boolean flags combined into one field to improve memory footprint. -
jaxbType
Gets the JAXB bound class type that thisJaxBeanInfo
handles.IOW, when a bean info object is requested for T, sometimes the bean info for one of its base classes might be returned.
-
-
Constructor Details
-
JaxBeanInfo
protected JaxBeanInfo(JAXBContextImpl grammar, RuntimeTypeInfo rti, Class<BeanT> jaxbType, QName[] typeNames, boolean isElement, boolean isImmutable, boolean hasLifecycleEvents) ForJaxBeanInfo
that has multiple type names. -
JaxBeanInfo
protected JaxBeanInfo(JAXBContextImpl grammar, RuntimeTypeInfo rti, Class<BeanT> jaxbType, QName typeName, boolean isElement, boolean isImmutable, boolean hasLifecycleEvents) ForJaxBeanInfo
that has one type name. -
JaxBeanInfo
protected JaxBeanInfo(JAXBContextImpl grammar, RuntimeTypeInfo rti, Class<BeanT> jaxbType, boolean isElement, boolean isImmutable, boolean hasLifecycleEvents) ForJaxBeanInfo
that has no type names.
-
-
Method Details
-
hasBeforeUnmarshalMethod
public final boolean hasBeforeUnmarshalMethod()True ifjaxbType
has the lifecycle method. -
hasAfterUnmarshalMethod
public final boolean hasAfterUnmarshalMethod()True ifjaxbType
has the lifecycle method. -
hasBeforeMarshalMethod
public final boolean hasBeforeMarshalMethod()True ifjaxbType
has the lifecycle method. -
hasAfterMarshalMethod
public final boolean hasAfterMarshalMethod()True ifjaxbType
has the lifecycle method. -
isElement
public final boolean isElement()Returns true if the bean is mapped to/from an XML element.When this method returns true,
getElementNamespaceURI(Object)
andgetElementLocalName(Object)
returns the element name of the bean. -
isImmutable
public final boolean isImmutable()Returns true if the bean is immutable.If this is true, Binder won't try to ueuse this object, and the unmarshaller won't create a new instance of it before it starts.
-
hasElementOnlyContentModel
public final boolean hasElementOnlyContentModel()True if this bean has an element-only content model.If this flag is true, the unmarshaller can work faster by ignoring whitespaces more efficiently.
-
hasElementOnlyContentModel
protected final void hasElementOnlyContentModel(boolean value) True if this bean has an element-only content model.Should be considered immutable, though I can't mark it final because it cannot be computed in this constructor.
-
isNilIncluded
public boolean isNilIncluded() -
lookForLifecycleMethods
public boolean lookForLifecycleMethods()This method is used to determine which of the sub-classes should be interrogated for the existence of lifecycle methods.- Returns:
- true if the un|marshaller should look for lifecycle methods on this beanInfo, false otherwise.
-
getElementNamespaceURI
Returns the namespace URI portion of the element name, if the bean that this class represents is mapped from/to an XML element.- Throws:
UnsupportedOperationException
- ifisElement()
is false.
-
getElementLocalName
Returns the local name portion of the element name, if the bean that this class represents is mapped from/to an XML element.- Throws:
UnsupportedOperationException
- ifisElement()
is false.
-
getTypeNames
Returns XML Schema type names if the bean is mapped from a complex/simple type of XML Schema.This is an ugly necessity to correctly handle the type substitution semantics of XML Schema.
A single Java class maybe mapped to more than one XML types. All the types listed here are recognized when we are unmarshalling XML.
null if the class is not bound to a named schema type.
-
getTypeName
Returns the XML type name to be used to marshal the specified instance.Most of the times the type can be determined regardless of the actual instance, but there's a few exceptions (most notably
XMLGregorianCalendar
), so as a general rule we need an instance to determine it. -
createInstance
public abstract BeanT createInstance(UnmarshallingContext context) throws IllegalAccessException, InvocationTargetException, InstantiationException, SAXException Creates a new instance of the bean.This operation is only supported when
isImmutable()
is false.- Parameters:
context
- Sometimes the created bean remembers the corresponding source location,- Throws:
IllegalAccessException
InvocationTargetException
InstantiationException
SAXException
-
reset
Resets the object to the initial state, as if the object is created fresh.This is used to reuse an existing object for unmarshalling.
- Parameters:
context
- used for reporting any errors.- Returns:
- true if the object was successfuly resetted.
False if the object is not resettable, in which case the object will be
discarded and new one will be created.
If the object is resettable but failed by an error, it should be reported to the context, then return false. If the object is not resettable to begin with, do not report an error.
- Throws:
SAXException
- as a result of reporting an error, the context may throw aSAXException
.
-
getId
Gets the ID value of the given bean, if it has an ID value. Otherwise return null.- Throws:
SAXException
-
serializeBody
public abstract void serializeBody(BeanT o, XMLSerializer target) throws SAXException, IOException, XMLStreamException Serializes child elements and texts into the specified target. -
serializeAttributes
public abstract void serializeAttributes(BeanT o, XMLSerializer target) throws SAXException, IOException, XMLStreamException Serializes attributes into the specified target. -
serializeRoot
public abstract void serializeRoot(BeanT o, XMLSerializer target) throws SAXException, IOException, XMLStreamException Serializes the bean as the root element.In the java-to-schema binding, an object might marshal in two different ways depending on whether it is used as the root of the graph or not. In the former case, an object could marshal as an element, whereas in the latter case, it marshals as a type.
This method is used to marshal the root of the object graph to allow this semantics to be implemented.
It is doubtful to me if it's a good idea for an object to marshal in two ways depending on the context.
For schema-to-java, this is equivalent to
serializeBody(Object, XMLSerializer)
. -
serializeURIs
Declares all the namespace URIs this object is using at its top-level scope into the specified target.- Throws:
SAXException
-
getLoader
Gets theLoader
that will unmarshall the given object.- Parameters:
context
- TheJAXBContextImpl
object that governs this object. This object is taken as a parameter so thatJaxBeanInfo
doesn't have to store them on its own. When this method is invoked from within the unmarshaller, tihs parameter can be null (because the loader is constructed already.)typeSubstitutionCapable
- If true, the returnedLoader
is capable of recognizing @xsi:type (if necessary) and unmarshals a subtype. This allowes an optimization where this bean info is guaranteed not to have a type substitution. If false, the returnedLoader
doesn't look for @xsi:type.- Returns:
- must return non-null valid object
-
getTransducer
If the bean's representation in XML is just a text, this method return aTransducer
that lets you convert values between the text and the bean. -
link
Called after all theJaxBeanInfo
s are created.- Parameters:
grammar
-
-
wrapUp
public void wrapUp()Called at the end of theJAXBContext
initialization phase to clean up any unnecessary references. -
setLifecycleFlags
protected final void setLifecycleFlags()use reflection to determine which of the 4 object lifecycle methods exist on the JAXB bound type. -
getLifecycleMethods
public final com.sun.xml.bind.v2.runtime.LifecycleMethods getLifecycleMethods()Return the LifecycleMethods cache for this ClassBeanInfo's corresponding jaxbType if it exists, else return null. -
invokeBeforeUnmarshalMethod
public final void invokeBeforeUnmarshalMethod(UnmarshallerImpl unm, Object child, Object parent) throws SAXException Invokes the beforeUnmarshal method if applicable.- Throws:
SAXException
-
invokeAfterUnmarshalMethod
public final void invokeAfterUnmarshalMethod(UnmarshallerImpl unm, Object child, Object parent) throws SAXException Invokes the afterUnmarshal method if applicable.- Throws:
SAXException
-