Top Description Fields Constructors Methods
org.glassfish.jaxb.runtime.v2.runtime

public abstract Class JaxBeanInfo<BeanT>

extends Object
Class Inheritance
Known Direct Subclasses
org.glassfish.jaxb.runtime.v2.runtime.LeafBeanInfoImpl, org.glassfish.jaxb.runtime.v2.runtime.ValueListBeanInfoImpl, org.glassfish.jaxb.runtime.v2.runtime.AnyTypeBeanInfo, org.glassfish.jaxb.runtime.v2.runtime.ArrayBeanInfoImpl, org.glassfish.jaxb.runtime.v2.runtime.ClassBeanInfoImpl, org.glassfish.jaxb.runtime.v2.runtime.CompositeStructureBeanInfo, org.glassfish.jaxb.runtime.v2.runtime.ElementBeanInfoImpl
Imports
com.sun.istack.NotNull, org.glassfish.jaxb.core.Utils, org.glassfish.jaxb.runtime.v2.model.runtime.RuntimeTypeInfo, org.glassfish.jaxb.runtime.v2.runtime.unmarshaller.Loader, .UnmarshallerImpl, .UnmarshallingContext, jakarta.xml.bind.JAXBContext, .Marshaller, .Unmarshaller, org.xml.sax.SAXException, javax.xml.datatype.XMLGregorianCalendar, javax.xml.namespace.QName, javax.xml.stream.XMLStreamException, java.io.IOException, java.lang.reflect.InvocationTargetException, .Method, java.security.AccessController, .PrivilegedAction, java.util.Arrays, .Collection, .Collections, java.util.logging.Level, .Logger

Encapsulates various JAXB operations on objects bound by JAXB. Immutable and thread-safe.

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 ([email protected])

Field Summary

Modifier and TypeField and Description
protected short
flag

Various boolean flags combined into one field to improve memory footprint.

private static final short
private static final short
private static final short
private static final short
private static final short
private static final short
private static final short
private static final short
protected boolean
public final Class<BeanT>
jaxbType

Gets the JAXB bound class type that this JaxBeanInfo handles.

private LifecycleMethods
lcm

cache of lifecycle methods

private static final Logger
private static Class<T>[]
private final Object
typeName

Type names associated with this JaxBeanInfo.

private static final Class<T>[]

Constructor Summary

AccessConstructor and Description
protected
JaxBeanInfo(JAXBContextImpl grammar, RuntimeTypeInfo rti, Class<BeanT> jaxbType, QName[] typeNames, boolean isElement, boolean isImmutable, boolean hasLifecycleEvents)

For that has multiple type names.

protected
JaxBeanInfo(JAXBContextImpl grammar, RuntimeTypeInfo rti, Class<BeanT> jaxbType, QName typeName, boolean isElement, boolean isImmutable, boolean hasLifecycleEvents)

For that has one type name.

protected
JaxBeanInfo(JAXBContextImpl grammar, RuntimeTypeInfo rti, Class<BeanT> jaxbType, boolean isElement, boolean isImmutable, boolean hasLifecycleEvents)

For that has no type names.

private
JaxBeanInfo(JAXBContextImpl grammar, RuntimeTypeInfo rti, Class<BeanT> jaxbType, Object typeName, boolean isElement, boolean isImmutable, boolean hasLifecycleEvents)

Method Summary

Modifier and TypeMethod and Description
private void
cacheLifecycleMethod(Method
Method reference
m
,
short
byte representing which of the 4 lifecycle methods is being cached
lifecycleFlag
)

Cache a reference to the specified lifecycle method for the jaxbType associated with this beanInfo.

public abstract BeanT
createInstance(UnmarshallingContext
Sometimes the created bean remembers the corresponding source location,
context
)

Creates a new instance of the bean.

private Method[]
getDeclaredMethods(final Class<BeanT> c)

public abstract String
getElementLocalName(BeanT o)

Returns the local name portion of the element name, if the bean that this class represents is mapped from/to an XML element.

public abstract String
getElementNamespaceURI(BeanT o)

Returns the namespace URI portion of the element name, if the bean that this class represents is mapped from/to an XML element.

public abstract String
getId(BeanT o, XMLSerializer target)

Gets the ID value of the given bean, if it has an ID value.

pack-priv final LifecycleMethods
getLifecycleMethods()

Return the LifecycleMethods cache for this ClassBeanInfo's corresponding jaxbType if it exists, else return null.

public abstract Loader

Returns:

must return non-null valid object
getLoader
(JAXBContextImpl
The JAXBContextImpl object that governs this object. This object is taken as a parameter so that 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.)
context
,
boolean
If true, the returned Loader 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 returned Loader doesn't look for @xsi:type.
typeSubstitutionCapable
)

Gets the Loader that will unmarshall the given object.

public abstract Transducer<BeanT>
getTransducer()

If the bean's representation in XML is just a text, this method return a Transducer that lets you convert values between the text and the bean.

public QName
getTypeName(BeanT instance)

Returns the XML type name to be used to marshal the specified instance.

public Collection<QName>
getTypeNames()

Returns XML Schema type names if the bean is mapped from a complex/simple type of XML Schema.

public final boolean
hasAfterMarshalMethod()

True if jaxbType has the lifecycle method.

public final boolean
hasAfterUnmarshalMethod()

True if jaxbType has the lifecycle method.

public final boolean
hasBeforeMarshalMethod()

True if jaxbType has the lifecycle method.

public final boolean
hasBeforeUnmarshalMethod()

True if jaxbType has the lifecycle method.

public final boolean
hasElementOnlyContentModel()

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.

public final void
invokeAfterUnmarshalMethod(UnmarshallerImpl unm, Object child, Object parent)

Invokes the afterUnmarshal method if applicable.

public final void
invokeBeforeUnmarshalMethod(UnmarshallerImpl unm, Object child, Object parent)

Invokes the beforeUnmarshal method if applicable.

private void
public final boolean
isElement()

Returns true if the bean is mapped to/from an XML element.

public final boolean
isImmutable()

Returns true if the bean is immutable.

public boolean
public boolean

Returns:

true if the un|marshaller should look for lifecycle methods on this beanInfo, false otherwise.
lookForLifecycleMethods
()

This method is used to determine which of the sub-classes should be interrogated for the existence of lifecycle methods.

private boolean
match(Method m, Class<T>[] params)

public abstract boolean

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.

reset
(BeanT o, UnmarshallingContext
used for reporting any errors.
context
)

Resets the object to the initial state, as if the object is created fresh.

public abstract void
serializeAttributes(BeanT o, XMLSerializer target)

Serializes attributes into the specified target.

public abstract void
serializeBody(BeanT o, XMLSerializer target)

Serializes child elements and texts into the specified target.

public abstract void
serializeRoot(BeanT o, XMLSerializer target)

Serializes the bean as the root element.

public 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
setLifecycleFlags()

use reflection to determine which of the 4 object lifecycle methods exist on the JAXB bound type.

public void
wrapUp()

Called at the end of the JAXBContext initialization phase to clean up any unnecessary references.

Inherited from java.lang.Object:
cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait

Field Detail

flagback to summary
protected short flag

Various boolean flags combined into one field to improve memory footprint.

FLAG_HAS_AFTER_MARSHAL_METHODback to summary
private static final short FLAG_HAS_AFTER_MARSHAL_METHOD
FLAG_HAS_AFTER_UNMARSHAL_METHODback to summary
private static final short FLAG_HAS_AFTER_UNMARSHAL_METHOD
FLAG_HAS_BEFORE_MARSHAL_METHODback to summary
private static final short FLAG_HAS_BEFORE_MARSHAL_METHOD
FLAG_HAS_BEFORE_UNMARSHAL_METHODback to summary
private static final short FLAG_HAS_BEFORE_UNMARSHAL_METHOD
FLAG_HAS_ELEMENT_ONLY_CONTENTMODELback to summary
private static final short FLAG_HAS_ELEMENT_ONLY_CONTENTMODEL
FLAG_HAS_LIFECYCLE_EVENTSback to summary
private static final short FLAG_HAS_LIFECYCLE_EVENTS
FLAG_IS_ELEMENTback to summary
private static final short FLAG_IS_ELEMENT
FLAG_IS_IMMUTABLEback to summary
private static final short FLAG_IS_IMMUTABLE
isNilIncludedback to summary
protected boolean isNilIncluded
jaxbTypeback to summary
public final Class<BeanT> jaxbType

Gets the JAXB bound class type that this JaxBeanInfo handles.

IOW, when a bean info object is requested for T, sometimes the bean info for one of its base classes might be returned.

lcmback to summary
private LifecycleMethods lcm

cache of lifecycle methods

loggerback to summary
private static final Logger logger
marshalEventParamsback to summary
private static Class<T>[] marshalEventParams
typeNameback to summary
private final Object typeName

Type names associated with this JaxBeanInfo.

See Also
getTypeNames()
unmarshalEventParamsback to summary
private static final Class<T>[] unmarshalEventParams

Constructor Detail

JaxBeanInfoback to summary
protected JaxBeanInfo(JAXBContextImpl grammar, RuntimeTypeInfo rti, Class<BeanT> jaxbType, QName[] typeNames, boolean isElement, boolean isImmutable, boolean hasLifecycleEvents)

For that has multiple type names.

JaxBeanInfoback to summary
protected JaxBeanInfo(JAXBContextImpl grammar, RuntimeTypeInfo rti, Class<BeanT> jaxbType, QName typeName, boolean isElement, boolean isImmutable, boolean hasLifecycleEvents)

For that has one type name.

JaxBeanInfoback to summary
protected JaxBeanInfo(JAXBContextImpl grammar, RuntimeTypeInfo rti, Class<BeanT> jaxbType, boolean isElement, boolean isImmutable, boolean hasLifecycleEvents)

For that has no type names.

JaxBeanInfoback to summary
private JaxBeanInfo(JAXBContextImpl grammar, RuntimeTypeInfo rti, Class<BeanT> jaxbType, Object typeName, boolean isElement, boolean isImmutable, boolean hasLifecycleEvents)

Method Detail

cacheLifecycleMethodback to summary
private void cacheLifecycleMethod(Method m, short lifecycleFlag)

Cache a reference to the specified lifecycle method for the jaxbType associated with this beanInfo.

Parameters
m:Method

Method reference

lifecycleFlag:short

byte representing which of the 4 lifecycle methods is being cached

createInstanceback to summary
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:UnmarshallingContext

Sometimes the created bean remembers the corresponding source location,

getDeclaredMethodsback to summary
private Method[] getDeclaredMethods(final Class<BeanT> c)
getElementLocalNameback to summary
public abstract String getElementLocalName(BeanT o)

Returns the local name portion of the element name, if the bean that this class represents is mapped from/to an XML element.

Exceptions
UnsupportedOperationException:
if isElement is false.
getElementNamespaceURIback to summary
public abstract String getElementNamespaceURI(BeanT o)

Returns the namespace URI portion of the element name, if the bean that this class represents is mapped from/to an XML element.

Exceptions
UnsupportedOperationException:
if isElement is false.
getIdback to summary
public abstract String getId(BeanT o, XMLSerializer target) throws SAXException

Gets the ID value of the given bean, if it has an ID value. Otherwise return null.

getLifecycleMethodsback to summary
pack-priv final LifecycleMethods getLifecycleMethods()

Return the LifecycleMethods cache for this ClassBeanInfo's corresponding jaxbType if it exists, else return null.

getLoaderback to summary
public abstract Loader getLoader(JAXBContextImpl context, boolean typeSubstitutionCapable)

Gets the Loader that will unmarshall the given object.

Parameters
context:JAXBContextImpl

The JAXBContextImpl object that governs this object. This object is taken as a parameter so that 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:boolean

If true, the returned Loader 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 returned Loader doesn't look for @xsi:type.

Returns:Loader

must return non-null valid object

getTransducerback to summary
public abstract Transducer<BeanT> getTransducer()

If the bean's representation in XML is just a text, this method return a Transducer that lets you convert values between the text and the bean.

getTypeNameback to summary
public QName getTypeName(BeanT instance)

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.

getTypeNamesback to summary
public Collection<QName> 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.

hasAfterMarshalMethodback to summary
public final boolean hasAfterMarshalMethod()

True if jaxbType has the lifecycle method.

hasAfterUnmarshalMethodback to summary
public final boolean hasAfterUnmarshalMethod()

True if jaxbType has the lifecycle method.

hasBeforeMarshalMethodback to summary
public final boolean hasBeforeMarshalMethod()

True if jaxbType has the lifecycle method.

hasBeforeUnmarshalMethodback to summary
public final boolean hasBeforeUnmarshalMethod()

True if jaxbType has the lifecycle method.

hasElementOnlyContentModelback to summary
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.

hasElementOnlyContentModelback to summary
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.

invokeAfterUnmarshalMethodback to summary
public final void invokeAfterUnmarshalMethod(UnmarshallerImpl unm, Object child, Object parent) throws SAXException

Invokes the afterUnmarshal method if applicable.

invokeBeforeUnmarshalMethodback to summary
public final void invokeBeforeUnmarshalMethod(UnmarshallerImpl unm, Object child, Object parent) throws SAXException

Invokes the beforeUnmarshal method if applicable.

invokeUnmarshallCallbackback to summary
private void invokeUnmarshallCallback(Method m, Object child, UnmarshallerImpl unm, Object parent) throws SAXException
isElementback to summary
public final boolean isElement()

Returns true if the bean is mapped to/from an XML element.

When this method returns true, getElementNamespaceURI(Object) and getElementLocalName(Object) returns the element name of the bean.

isImmutableback to summary
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.

isNilIncludedback to summary
public boolean isNilIncluded()
lookForLifecycleMethodsback to summary
public boolean lookForLifecycleMethods()

This method is used to determine which of the sub-classes should be interrogated for the existence of lifecycle methods.

Returns:boolean

true if the un|marshaller should look for lifecycle methods on this beanInfo, false otherwise.

matchback to summary
private boolean match(Method m, Class<T>[] params)
resetback to summary
public abstract boolean reset(BeanT o, UnmarshallingContext context) throws SAXException

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:UnmarshallingContext

used for reporting any errors.

Returns:boolean

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.

Exceptions
SAXException:
as a result of reporting an error, the context may throw a SAXException.
serializeAttributesback to summary
public abstract void serializeAttributes(BeanT o, XMLSerializer target) throws SAXException, IOException, XMLStreamException

Serializes attributes into the specified target.

serializeBodyback to summary
public abstract void serializeBody(BeanT o, XMLSerializer target) throws SAXException, IOException, XMLStreamException

Serializes child elements and texts into the specified target.

serializeRootback to summary
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).

serializeURIsback to summary
public abstract void serializeURIs(BeanT o, XMLSerializer target) throws SAXException

Declares all the namespace URIs this object is using at its top-level scope into the specified target.

setLifecycleFlagsback to summary
protected final void setLifecycleFlags()

use reflection to determine which of the 4 object lifecycle methods exist on the JAXB bound type.

Annotations
@SuppressWarnings:unchecked
wrapUpback to summary
public void wrapUp()

Called at the end of the JAXBContext initialization phase to clean up any unnecessary references.