com.sun.xml.bind.v2.model.impl
Class ClassInfoImpl<T,C,F,M>

java.lang.Object
  extended by com.sun.xml.bind.v2.model.impl.ClassInfoImpl<T,C,F,M>
All Implemented Interfaces:
Locatable, ClassInfo<T,C>, Element<T,C>, MaybeElement<T,C>, NonElement<T,C>, TypeInfo<T,C>

public class ClassInfoImpl<T,C,F,M>
extends Object
implements ClassInfo<T,C>, Element<T,C>

A part of the ClassInfo that doesn't depend on a particular reflection library.

Author:
Kohsuke Kawaguchi (kk@kohsuke.org)

Field Summary
protected  com.sun.xml.bind.v2.model.impl.PropertySeed<T,C,F,M> attributeWildcard
          If this class has a declared (not inherited) attribute wildcard, keep the reference to it.
protected  ModelBuilder<TypeT,ClassDeclT,FieldT,MethodT> builder
          Reference to the ModelBuilder, only until we link TypeInfos all together, because we don't want to keep ModelBuilder too long.
protected  C clazz
           
protected  com.sun.xml.bind.v2.model.impl.TypeInfoSetImpl<TypeT,ClassDeclT,FieldT,MethodT> owner
          TypeInfoSet to which this class belongs.
 
Fields inherited from interface com.sun.xml.bind.v2.model.core.NonElement
ANYTYPE_NAME
 
Method Summary
 Element<T,C> asElement()
          Returns the Element aspect of this ClassInfo.
 boolean canBeReferencedByIDREF()
          A ClassInfo can be referenced by XmlIDREF if it has an ID property.
protected  void checkFieldXmlLocation(F f)
          This hook is used by RuntimeClassInfoImpl to look for XmlLocation.
protected  com.sun.xml.bind.v2.model.impl.PropertySeed<T,C,F,M> createAccessorSeed(M getter, M setter)
          Creates a new GetterSetterPropertySeed object.
protected  com.sun.xml.bind.v2.model.impl.AttributePropertyInfoImpl<T,C,F,M> createAttributeProperty(com.sun.xml.bind.v2.model.impl.PropertySeed<T,C,F,M> seed)
           
protected  com.sun.xml.bind.v2.model.impl.ElementPropertyInfoImpl<T,C,F,M> createElementProperty(com.sun.xml.bind.v2.model.impl.PropertySeed<T,C,F,M> seed)
           
protected  com.sun.xml.bind.v2.model.impl.PropertySeed<T,C,F,M> createFieldSeed(F f)
          Creates a new FieldPropertySeed object.
protected  com.sun.xml.bind.v2.model.impl.MapPropertyInfoImpl<T,C,F,M> createMapProperty(com.sun.xml.bind.v2.model.impl.PropertySeed<T,C,F,M> seed)
           
protected  com.sun.xml.bind.v2.model.impl.ReferencePropertyInfoImpl<T,C,F,M> createReferenceProperty(com.sun.xml.bind.v2.model.impl.PropertySeed<T,C,F,M> seed)
           
protected  com.sun.xml.bind.v2.model.impl.ValuePropertyInfoImpl<T,C,F,M> createValueProperty(com.sun.xml.bind.v2.model.impl.PropertySeed<T,C,F,M> seed)
           
 boolean declaresAttributeWildcard()
          Returns true iff this class declares a wildcard attribute.
 ClassInfoImpl<T,C,F,M> getBaseClass()
          Obtains the information about the base class.
 C getClazz()
          Gets the declaration this object is wrapping.
 QName getElementName()
          Gets the element name of the class, if the class is bound to an element.
 Method getFactoryMethod()
           
 Location getLocation()
          Gets the location object that this object points to.
 String getName()
          Gets the fully-qualified name of the class.
 List<? extends PropertyInfo<T,C>> getProperties()
          Returns all the properties newly declared in this class.
 PropertyInfo<T,C> getProperty(String name)
          Gets the property that has the specified name.
 ClassInfoImpl<T,C,F,M> getScope()
          Deprecated. you shouldn't be invoking this method on ClassInfoImpl.
 Element<T,C> getSubstitutionHead()
          If this element can substitute another element, return that element.
 T getType()
          Gets the underlying Java type that object represents.
 QName getTypeName()
          Gets the primary XML type ANYTYPE_NAME of the class.
 Locatable getUpstream()
          Gets the upstream Location information.
 boolean hasAttributeWildcard()
          Returns true if this bean class has an attribute wildcard.
 boolean hasProperties()
          If the class has properties, return true.
 boolean hasSubClasses()
          True if there's a known sub-type of this class in TypeInfoSet.
 boolean hasValueProperty()
          Returns true if this class or its ancestor has XmlValue property.
 boolean inheritsAttributeWildcard()
          Returns true iff this class inherits a wildcard attribute from its ancestor classes.
 boolean isAbstract()
          If this class is abstract and thus shall never be directly instanciated.
 boolean isElement()
          If the class is bound to an element, return true.
 boolean isFinal()
          If this class is marked as final and no further extension/restriction is allowed.
 boolean isOrdered()
          Returns true if the properties of this class is ordered in XML.
 boolean isSimpleType()
          Returns true if this NonElement maps to text in XML, without any attribute nor child elements.
protected  Navigator<TypeT,ClassDeclT,FieldT,MethodT> nav()
           
protected  QName parseElementName(ClassDeclT clazz)
          Parses an XmlRootElement annotation on a class and determine the element name.
protected  QName parseTypeName(ClassDeclT clazz)
           
protected  QName parseTypeName(ClassDeclT clazz, XmlType t)
          Parses a (potentially-null) XmlType annotation on a class and determine the actual value.
<A extends Annotation>
A
readAnnotation(Class<A> a)
           
protected  AnnotationReader<TypeT,ClassDeclT,FieldT,MethodT> reader()
           
 String toString()
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface com.sun.xml.bind.v2.model.annotation.Locatable
getUpstream
 

Field Detail

clazz

protected final C clazz

attributeWildcard

protected com.sun.xml.bind.v2.model.impl.PropertySeed<T,C,F,M> attributeWildcard
If this class has a declared (not inherited) attribute wildcard, keep the reference to it. This parameter is initialized at the construction time and never change.


owner

protected final com.sun.xml.bind.v2.model.impl.TypeInfoSetImpl<TypeT,ClassDeclT,FieldT,MethodT> owner
TypeInfoSet to which this class belongs.


builder

protected ModelBuilder<TypeT,ClassDeclT,FieldT,MethodT> builder
Reference to the ModelBuilder, only until we link TypeInfos all together, because we don't want to keep ModelBuilder too long.

Method Detail

getBaseClass

public ClassInfoImpl<T,C,F,M> getBaseClass()
Description copied from interface: ClassInfo
Obtains the information about the base class.

Specified by:
getBaseClass in interface ClassInfo<T,C>
Returns:
null if this info extends from Object.

getSubstitutionHead

public final Element<T,C> getSubstitutionHead()
If this element can substitute another element, return that element.

Substitutability of elements are transitive. The substitution hierarchy is the same as the inheritance hierarchy.

Specified by:
getSubstitutionHead in interface Element<T,C>
Returns:
null if no such element exists.

getClazz

public final C getClazz()
Description copied from interface: ClassInfo
Gets the declaration this object is wrapping.

Specified by:
getClazz in interface ClassInfo<T,C>

getScope

public ClassInfoImpl<T,C,F,M> getScope()
Deprecated. you shouldn't be invoking this method on ClassInfoImpl.

When a bean binds to an element, it's always through XmlRootElement, so this method always return null.

Specified by:
getScope in interface Element<T,C>

getType

public final T getType()
Description copied from interface: TypeInfo
Gets the underlying Java type that object represents.

Specified by:
getType in interface TypeInfo<T,C>
Returns:
always non-null.

canBeReferencedByIDREF

public boolean canBeReferencedByIDREF()
A ClassInfo can be referenced by XmlIDREF if it has an ID property.

Specified by:
canBeReferencedByIDREF in interface TypeInfo<T,C>

getName

public final String getName()
Description copied from interface: ClassInfo
Gets the fully-qualified name of the class.

Specified by:
getName in interface ClassInfo<T,C>

readAnnotation

public <A extends Annotation> A readAnnotation(Class<A> a)

asElement

public Element<T,C> asElement()
Description copied from interface: MaybeElement
Returns the Element aspect of this ClassInfo.

Specified by:
asElement in interface MaybeElement<T,C>
Returns:
null if MaybeElement.isElement()==false, non-null if MaybeElement.isElement()==true.

getProperties

public List<? extends PropertyInfo<T,C>> getProperties()
Description copied from interface: ClassInfo
Returns all the properties newly declared in this class.

This excludes properties defined in the super class.

If the properties are ordered, it will be returned in the order that appear in XML. Otherwise it will be returned in no particular order.

Properties marked with XmlTransient will not show up in this list. As far as JAXB is concerned, they are considered non-existent.

Specified by:
getProperties in interface ClassInfo<T,C>
Returns:
always non-null, but can be empty.

hasValueProperty

public final boolean hasValueProperty()
Description copied from interface: ClassInfo
Returns true if this class or its ancestor has XmlValue property.

Specified by:
hasValueProperty in interface ClassInfo<T,C>

getProperty

public PropertyInfo<T,C> getProperty(String name)
Description copied from interface: ClassInfo
Gets the property that has the specified name.

This is just a convenience method for:

 for( PropertyInfo p : getProperties() ) {
   if(p.getName().equals(name))
     return p;
 }
 return null;
 

Specified by:
getProperty in interface ClassInfo<T,C>
Returns:
null if the property was not found.
See Also:
PropertyInfo.getName()

checkFieldXmlLocation

protected void checkFieldXmlLocation(F f)
This hook is used by RuntimeClassInfoImpl to look for XmlLocation.


hasProperties

public boolean hasProperties()
Description copied from interface: ClassInfo
If the class has properties, return true. This is only true if the Collection object returned by ClassInfo.getProperties() is not empty.

Specified by:
hasProperties in interface ClassInfo<T,C>

createReferenceProperty

protected com.sun.xml.bind.v2.model.impl.ReferencePropertyInfoImpl<T,C,F,M> createReferenceProperty(com.sun.xml.bind.v2.model.impl.PropertySeed<T,C,F,M> seed)

createAttributeProperty

protected com.sun.xml.bind.v2.model.impl.AttributePropertyInfoImpl<T,C,F,M> createAttributeProperty(com.sun.xml.bind.v2.model.impl.PropertySeed<T,C,F,M> seed)

createValueProperty

protected com.sun.xml.bind.v2.model.impl.ValuePropertyInfoImpl<T,C,F,M> createValueProperty(com.sun.xml.bind.v2.model.impl.PropertySeed<T,C,F,M> seed)

createElementProperty

protected com.sun.xml.bind.v2.model.impl.ElementPropertyInfoImpl<T,C,F,M> createElementProperty(com.sun.xml.bind.v2.model.impl.PropertySeed<T,C,F,M> seed)

createMapProperty

protected com.sun.xml.bind.v2.model.impl.MapPropertyInfoImpl<T,C,F,M> createMapProperty(com.sun.xml.bind.v2.model.impl.PropertySeed<T,C,F,M> seed)

createFieldSeed

protected com.sun.xml.bind.v2.model.impl.PropertySeed<T,C,F,M> createFieldSeed(F f)
Creates a new FieldPropertySeed object.

Derived class can override this method to create a sub-class.


createAccessorSeed

protected com.sun.xml.bind.v2.model.impl.PropertySeed<T,C,F,M> createAccessorSeed(M getter,
                                                                                  M setter)
Creates a new GetterSetterPropertySeed object.


isElement

public final boolean isElement()
Description copied from interface: MaybeElement
If the class is bound to an element, return true.

Note that when this is true, the class is bound to both an element and a type.

Specified by:
isElement in interface MaybeElement<T,C>

isAbstract

public boolean isAbstract()
Description copied from interface: ClassInfo
If this class is abstract and thus shall never be directly instanciated.

Specified by:
isAbstract in interface ClassInfo<T,C>

isOrdered

public boolean isOrdered()
Description copied from interface: ClassInfo
Returns true if the properties of this class is ordered in XML. False if it't not.

In RELAX NG context, ordered properties mean <group> and unordered properties mean <interleave>.

Specified by:
isOrdered in interface ClassInfo<T,C>

isFinal

public final boolean isFinal()
Description copied from interface: ClassInfo
If this class is marked as final and no further extension/restriction is allowed.

Specified by:
isFinal in interface ClassInfo<T,C>

hasSubClasses

public final boolean hasSubClasses()
Description copied from interface: ClassInfo
True if there's a known sub-type of this class in TypeInfoSet.

Specified by:
hasSubClasses in interface ClassInfo<T,C>

hasAttributeWildcard

public final boolean hasAttributeWildcard()
Description copied from interface: ClassInfo
Returns true if this bean class has an attribute wildcard.

This is true if the class declares an attribute wildcard, or it is inherited from its super classes.

Specified by:
hasAttributeWildcard in interface ClassInfo<T,C>
See Also:
ClassInfo.inheritsAttributeWildcard()

inheritsAttributeWildcard

public final boolean inheritsAttributeWildcard()
Description copied from interface: ClassInfo
Returns true iff this class inherits a wildcard attribute from its ancestor classes.

Specified by:
inheritsAttributeWildcard in interface ClassInfo<T,C>

declaresAttributeWildcard

public final boolean declaresAttributeWildcard()
Description copied from interface: ClassInfo
Returns true iff this class declares a wildcard attribute.

Specified by:
declaresAttributeWildcard in interface ClassInfo<T,C>

getElementName

public final QName getElementName()
Description copied from interface: MaybeElement
Gets the element name of the class, if the class is bound to an element.

Specified by:
getElementName in interface Element<T,C>
Specified by:
getElementName in interface MaybeElement<T,C>
Returns:
non-null iff MaybeElement.isElement().

getTypeName

public final QName getTypeName()
Description copied from interface: NonElement
Gets the primary XML type ANYTYPE_NAME of the class.

A Java type can be mapped to multiple XML types, but one of them is considered "primary" and used when we generate a schema.

Specified by:
getTypeName in interface NonElement<T,C>
Returns:
null if the object doesn't have an explicit type ANYTYPE_NAME (AKA anonymous.)

isSimpleType

public final boolean isSimpleType()
Description copied from interface: NonElement
Returns true if this NonElement maps to text in XML, without any attribute nor child elements.

Specified by:
isSimpleType in interface NonElement<T,C>

getLocation

public Location getLocation()
Description copied from interface: Locatable
Gets the location object that this object points to. This operation could be inefficient and costly.

Specified by:
getLocation in interface Locatable

getFactoryMethod

public Method getFactoryMethod()

toString

public String toString()
Overrides:
toString in class Object

getUpstream

public Locatable getUpstream()
Description copied from interface: Locatable
Gets the upstream Location information.

Specified by:
getUpstream in interface Locatable
Returns:
can be null.

nav

protected final Navigator<TypeT,ClassDeclT,FieldT,MethodT> nav()

reader

protected final AnnotationReader<TypeT,ClassDeclT,FieldT,MethodT> reader()

parseElementName

protected final QName parseElementName(ClassDeclT clazz)
Parses an XmlRootElement annotation on a class and determine the element name.

Returns:
null if none was found.

parseTypeName

protected final QName parseTypeName(ClassDeclT clazz)

parseTypeName

protected final QName parseTypeName(ClassDeclT clazz,
                                    XmlType t)
Parses a (potentially-null) XmlType annotation on a class and determine the actual value.

Parameters:
clazz - The class on which the XmlType annotation is checked.
t - The XmlType annotation on the clazz. This value is taken as a parameter to improve the performance for the case where 't' is pre-computed.


Copyright © 2005-2015 Oracle Corporation. All Rights Reserved.