org.eclipse.persistence.jaxb.compiler
Class AnnotationsProcessor
java.lang.Object
org.eclipse.persistence.jaxb.compiler.AnnotationsProcessor
public class AnnotationsProcessor
- extends Object
INTERNAL:
Purpose:To perform some initial processing of Java classes and JAXB 2.0
Annotations and generate meta data that can be used by the Mappings Generator and Schema Generator
Responsibilities:
- Generate a map of TypeInfo objects, keyed on class name
- Generate a map of user defined schema types
- Identify any class-based JAXB 2.0 callback methods, and create MarshalCallback and
UnmarshalCallback objects to wrap them.
- Centralize processing which is common to both Schema Generation and Mapping Generation tasks
This class does the initial processing of the JAXB 2.0 Generation. It generates meta data
that can be used by the later Schema Generation and Mapping Generation steps.
- Since:
- Oracle TopLink 11.1.1.0.0
- Author:
- mmacivor
- See Also:
Generator
Method Summary |
SchemaTypeInfo |
addClass(JavaClass javaClass)
|
void |
addEnumTypeInfo(JavaClass javaClass,
EnumTypeInfo info)
|
void |
addPackageToNamespaceMapping(String packageName,
NamespaceInfo nsInfo)
Add a package name/NamespaceInfo entry to the map. |
void |
addXmlRegistry(String factoryClassName,
XmlRegistry xmlReg)
Add an XmlRegistry to ObjectFactory class name pair to the map. |
void |
buildNewTypeInfo(JavaClass[] javaClasses)
Convenience method which class pre and postBuildTypeInfo for a given set
of JavaClasses. |
void |
createElementsForTypeMappingInfo()
|
void |
finalizeProperties()
Perform any final generation and/or validation operations on TypeInfo
properties. |
Map<String,Class> |
getArrayClassesToGeneratedClasses()
|
Map<Type,Class> |
getCollectionClassesToGeneratedClasses()
|
ArrayList<Property> |
getFieldPropertiesForClass(JavaClass cls,
TypeInfo info,
boolean onlyPublic)
|
Map<Class,JavaClass> |
getGeneratedClassesToArrayClasses()
|
Map<Class,Type> |
getGeneratedClassesToCollectionClasses()
|
HashMap<QName,ElementDeclaration> |
getGlobalElements()
Lazy load and return the map of global elements. |
List<ElementDeclaration> |
getLocalElements()
|
HashMap<String,MarshalCallback> |
getMarshalCallbacks()
|
NamespaceInfo |
getNamespaceInfoForPackage(JavaClass javaClass)
|
NamespaceInfo |
getNamespaceInfoForPackage(JavaPackage pack)
|
NamespaceResolver |
getNamespaceResolver()
|
ArrayList |
getNoAccessTypePropertiesForClass(JavaClass cls,
TypeInfo info)
|
HashMap<String,NamespaceInfo> |
getPackageToNamespaceMappings()
|
ArrayList<Property> |
getPropertiesForClass(JavaClass cls,
TypeInfo info)
|
HashMap |
getPropertyMapFromArrayList(ArrayList<Property> props)
|
ArrayList<Property> |
getPropertyPropertiesForClass(JavaClass cls,
TypeInfo info,
boolean onlyPublic)
|
ArrayList |
getPublicMemberPropertiesForClass(JavaClass cls,
TypeInfo info)
|
QName |
getQNameForProperty(String defaultName,
JavaHasAnnotations element,
NamespaceInfo namespaceInfo,
String uri)
|
QName |
getSchemaTypeFor(JavaClass javaClass)
|
String |
getSchemaTypeNameFor(JavaClass javaClass,
XmlType xmlType)
|
String |
getSchemaTypeNameForClassName(String className)
|
QName |
getSchemaTypeOrNullFor(JavaClass javaClass)
|
HashMap<String,TypeInfo> |
getTypeInfo()
|
ArrayList<JavaClass> |
getTypeInfoClasses()
|
Map<String,TypeInfo> |
getTypeInfosForPackage(String packageName)
Convenience method for returning all of the TypeInfo objects for a given package name. |
Map<TypeMappingInfo,Class> |
getTypeMappingInfoToAdapterClasses()
|
Map<TypeMappingInfo,Class> |
getTypeMappingInfoToGeneratedClasses()
|
Map<TypeMappingInfo,QName> |
getTypeMappingInfoToSchemaType()
|
HashMap<String,UnmarshalCallback> |
getUnmarshalCallbacks()
|
HashMap<String,QName> |
getUserDefinedSchemaTypes()
|
boolean |
isCollectionType(JavaClass type)
|
boolean |
isCollectionType(Property field)
|
boolean |
isDefaultNamespaceAllowed()
|
boolean |
isMapType(JavaClass type)
|
JavaClass[] |
postBuildTypeInfo(JavaClass[] javaClasses)
Process any additional classes (i.e. |
Map<String,TypeInfo> |
preBuildTypeInfo(JavaClass[] javaClasses)
Process class level annotations only. |
void |
processJavaClasses(JavaClass[] classes)
Process a given set of JavaClass instances. |
NamespaceInfo |
processNamespaceInformation(XmlSchema xmlSchema)
|
JavaClass[] |
processObjectFactory(JavaClass objectFactoryClass,
ArrayList<JavaClass> classes)
|
void |
processSchemaType(String name,
String namespace,
String jClassQualifiedName)
Use name, namespace and type information to setup a user-defined
schema type. |
void |
processSchemaType(XmlSchemaType type)
|
void |
setDefaultNamespaceAllowed(boolean isDefaultNamespaceAllowed)
|
void |
setPackageToNamespaceMappings(HashMap<String,NamespaceInfo> packageToNamespaceMappings)
Set namespace override info from XML bindings file. |
boolean |
shouldGenerateTypeInfo(JavaClass javaClass)
|
void |
updateGlobalElements(JavaClass[] classesToProcess)
|
AnnotationsProcessor
public AnnotationsProcessor(Helper helper)
createElementsForTypeMappingInfo
public void createElementsForTypeMappingInfo()
preBuildTypeInfo
public Map<String,TypeInfo> preBuildTypeInfo(JavaClass[] javaClasses)
- Process class level annotations only. It is assumed that a call to init()
has been made prior to calling this method. After the types created via
this method have been modified (if necessary) postBuildTypeInfo and
processJavaClasses should be called to finish processing.
- Parameters:
javaClasses
-
- Returns:
postBuildTypeInfo
public JavaClass[] postBuildTypeInfo(JavaClass[] javaClasses)
- Process any additional classes (i.e. inner classes, @XmlSeeAlso, @XmlRegisrty, etc.)
for a given set of JavaClasses, then complete building all of the required TypeInfo
objects. This method is typically called after init and preBuildTypeInfo have been
called.
- Parameters:
javaClasses
-
- Returns:
- updated array of JavaClasses, made up of the original classes plus any additional ones
finalizeProperties
public void finalizeProperties()
- Perform any final generation and/or validation operations on TypeInfo
properties.
processJavaClasses
public void processJavaClasses(JavaClass[] classes)
- Process a given set of JavaClass instances. @XmlIDREFs will be validated, and call back methods
will be handled as required. This method is typically called after init, preBuildTypeInfo, and
postBuildTypeInfo have been called.
- Parameters:
classes
-
shouldGenerateTypeInfo
public boolean shouldGenerateTypeInfo(JavaClass javaClass)
getPropertiesForClass
public ArrayList<Property> getPropertiesForClass(JavaClass cls,
TypeInfo info)
getFieldPropertiesForClass
public ArrayList<Property> getFieldPropertiesForClass(JavaClass cls,
TypeInfo info,
boolean onlyPublic)
getPropertyPropertiesForClass
public ArrayList<Property> getPropertyPropertiesForClass(JavaClass cls,
TypeInfo info,
boolean onlyPublic)
getPublicMemberPropertiesForClass
public ArrayList getPublicMemberPropertiesForClass(JavaClass cls,
TypeInfo info)
getPropertyMapFromArrayList
public HashMap getPropertyMapFromArrayList(ArrayList<Property> props)
getNoAccessTypePropertiesForClass
public ArrayList getNoAccessTypePropertiesForClass(JavaClass cls,
TypeInfo info)
processSchemaType
public void processSchemaType(String name,
String namespace,
String jClassQualifiedName)
- Use name, namespace and type information to setup a user-defined
schema type. This method will typically be called when processing
an @XmlSchemaType(s) annotation or xml-schema-type(s) metadata.
- Parameters:
name
- namespace
- jClassQualifiedName
-
processSchemaType
public void processSchemaType(XmlSchemaType type)
addEnumTypeInfo
public void addEnumTypeInfo(JavaClass javaClass,
EnumTypeInfo info)
getSchemaTypeNameForClassName
public String getSchemaTypeNameForClassName(String className)
getSchemaTypeOrNullFor
public QName getSchemaTypeOrNullFor(JavaClass javaClass)
getSchemaTypeFor
public QName getSchemaTypeFor(JavaClass javaClass)
isCollectionType
public boolean isCollectionType(Property field)
isCollectionType
public boolean isCollectionType(JavaClass type)
processNamespaceInformation
public NamespaceInfo processNamespaceInformation(XmlSchema xmlSchema)
getTypeInfo
public HashMap<String,TypeInfo> getTypeInfo()
getTypeInfoClasses
public ArrayList<JavaClass> getTypeInfoClasses()
getUserDefinedSchemaTypes
public HashMap<String,QName> getUserDefinedSchemaTypes()
getNamespaceResolver
public NamespaceResolver getNamespaceResolver()
getSchemaTypeNameFor
public String getSchemaTypeNameFor(JavaClass javaClass,
XmlType xmlType)
getQNameForProperty
public QName getQNameForProperty(String defaultName,
JavaHasAnnotations element,
NamespaceInfo namespaceInfo,
String uri)
getPackageToNamespaceMappings
public HashMap<String,NamespaceInfo> getPackageToNamespaceMappings()
addPackageToNamespaceMapping
public void addPackageToNamespaceMapping(String packageName,
NamespaceInfo nsInfo)
- Add a package name/NamespaceInfo entry to the map. This method will lazy-load
the map if necessary.
getNamespaceInfoForPackage
public NamespaceInfo getNamespaceInfoForPackage(JavaClass javaClass)
getNamespaceInfoForPackage
public NamespaceInfo getNamespaceInfoForPackage(JavaPackage pack)
getMarshalCallbacks
public HashMap<String,MarshalCallback> getMarshalCallbacks()
getUnmarshalCallbacks
public HashMap<String,UnmarshalCallback> getUnmarshalCallbacks()
processObjectFactory
public JavaClass[] processObjectFactory(JavaClass objectFactoryClass,
ArrayList<JavaClass> classes)
getGlobalElements
public HashMap<QName,ElementDeclaration> getGlobalElements()
- Lazy load and return the map of global elements.
- Returns:
updateGlobalElements
public void updateGlobalElements(JavaClass[] classesToProcess)
isMapType
public boolean isMapType(JavaClass type)
getCollectionClassesToGeneratedClasses
public Map<Type,Class> getCollectionClassesToGeneratedClasses()
getArrayClassesToGeneratedClasses
public Map<String,Class> getArrayClassesToGeneratedClasses()
getGeneratedClassesToCollectionClasses
public Map<Class,Type> getGeneratedClassesToCollectionClasses()
getGeneratedClassesToArrayClasses
public Map<Class,JavaClass> getGeneratedClassesToArrayClasses()
getTypeInfosForPackage
public Map<String,TypeInfo> getTypeInfosForPackage(String packageName)
- Convenience method for returning all of the TypeInfo objects for a given package name.
This method is inefficient as we need to iterate over the entire typeinfo map for each
call. We should eventually store the TypeInfos in a Map based on package name, i.e.:
Map>
- Parameters:
packageName
-
- Returns:
- List of TypeInfo objects for a given package name
setPackageToNamespaceMappings
public void setPackageToNamespaceMappings(HashMap<String,NamespaceInfo> packageToNamespaceMappings)
- Set namespace override info from XML bindings file. This will typically
be called from the XMLProcessor.
- Parameters:
packageToNamespaceMappings
-
addClass
public SchemaTypeInfo addClass(JavaClass javaClass)
buildNewTypeInfo
public void buildNewTypeInfo(JavaClass[] javaClasses)
- Convenience method which class pre and postBuildTypeInfo for a given set
of JavaClasses.
- Parameters:
javaClasses
-
isDefaultNamespaceAllowed
public boolean isDefaultNamespaceAllowed()
getLocalElements
public List<ElementDeclaration> getLocalElements()
getTypeMappingInfoToGeneratedClasses
public Map<TypeMappingInfo,Class> getTypeMappingInfoToGeneratedClasses()
getTypeMappingInfoToAdapterClasses
public Map<TypeMappingInfo,Class> getTypeMappingInfoToAdapterClasses()
addXmlRegistry
public void addXmlRegistry(String factoryClassName,
XmlRegistry xmlReg)
- Add an XmlRegistry to ObjectFactory class name pair to the map.
- Parameters:
factoryClassName
- ObjectFactory class namexmlReg
- org.eclipse.persistence.jaxb.xmlmodel.XmlRegistry instance
getTypeMappingInfoToSchemaType
public Map<TypeMappingInfo,QName> getTypeMappingInfoToSchemaType()
setDefaultNamespaceAllowed
public void setDefaultNamespaceAllowed(boolean isDefaultNamespaceAllowed)