Class AnnotationsProcessor

java.lang.Object
org.eclipse.persistence.jaxb.compiler.AnnotationsProcessor

public final 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.

See Also:
Author:
mmacivor
  • Constructor Details

    • AnnotationsProcessor

      public AnnotationsProcessor(Helper helper)
  • Method Details

    • 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, @XmlRegistry, 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
    • processPropertiesSuperClass

      public void processPropertiesSuperClass(JavaClass cls, TypeInfo info)
    • finalizeProperties

      public void finalizeProperties()
      Perform any final generation and/or validation operations on TypeInfo properties.
    • 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)
    • getFieldPropertiesForClass

      public ArrayList<Property> getFieldPropertiesForClass(JavaClass cls, TypeInfo info, boolean onlyPublic, boolean onlyExplicit)
    • areEquals

      protected boolean areEquals(JavaClass src, Class tgt)
      Compares a JavaModel JavaClass to a Class. Equality is based on the raw name of the JavaClass compared to the canonical name of the Class.
      Parameters:
      src -
      tgt -
      Returns:
    • areEquals

      protected boolean areEquals(JavaClass src, String tgtCanonicalName)
      Compares a JavaModel JavaClass to a Class. Equality is based on the raw name of the JavaClass compared to the canonical name of the Class.
      Parameters:
      src -
      tgtCanonicalName -
      Returns:
    • getPropertyPropertiesForClass

      public ArrayList<Property> getPropertyPropertiesForClass(JavaClass cls, TypeInfo info, boolean onlyPublic)
    • getPropertyPropertiesForClass

      public ArrayList<Property> getPropertyPropertiesForClass(JavaClass cls, TypeInfo info, boolean onlyPublic, boolean onlyExplicit)
    • getPublicMemberPropertiesForClass

      public ArrayList getPublicMemberPropertiesForClass(JavaClass cls, TypeInfo info)
    • getPropertyMapFromArrayList

      public HashMap<String,Property> 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(jakarta.xml.bind.annotation.XmlSchemaType type)
    • addEnumTypeInfo

      public void addEnumTypeInfo(JavaClass javaClass, EnumTypeInfo info)
    • getSchemaTypeOrNullFor

      public QName getSchemaTypeOrNullFor(JavaClass javaClass)
    • getSchemaTypeFor

      public QName getSchemaTypeFor(JavaClass javaClass)
    • processNamespaceInformation

      public NamespaceInfo processNamespaceInformation(jakarta.xml.bind.annotation.XmlSchema xmlSchema)
    • getTypeInfos

      public Map<String,TypeInfo> getTypeInfos()
    • getTypeInfoClasses

      public List<JavaClass> getTypeInfoClasses()
    • getUserDefinedSchemaTypes

      public Map<String,QName> getUserDefinedSchemaTypes()
    • getQNameForProperty

      public QName getQNameForProperty(Property property, String defaultName, JavaHasAnnotations element, NamespaceInfo namespaceInfo, TypeInfo info)
    • getPackageToPackageInfoMappings

      public Map<String,PackageInfo> getPackageToPackageInfoMappings()
    • 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.
    • addPackageToXmlElementNillable

      public void addPackageToXmlElementNillable(String packageName, XmlElementNillable xmlElementNillable)
      Add a package name/XmlElementNillable entry to the map. This method will lazy-load the map if necessary.
    • addPackageToXmlNullPolicy

      public void addPackageToXmlNullPolicy(String packageName, XmlNullPolicy xmlNullPolicy)
      Add a package name/XmlNullPolicy entry to the map. This method will lazy-load the map if necessary.
    • addPackageToPackageInfoMapping

      public void addPackageToPackageInfoMapping(String packageName, PackageInfo packageInfo)
    • getPackageInfoForPackage

      public PackageInfo getPackageInfoForPackage(JavaClass javaClass)
    • getPackageInfoForPackage

      public PackageInfo getPackageInfoForPackage(JavaPackage pack, String packageName)
    • findInfoForNamespace

      public NamespaceInfo findInfoForNamespace(String namespace)
    • getMarshalCallbacks

      public Map<String,MarshalCallback> getMarshalCallbacks()
    • getUnmarshalCallbacks

      public Map<String,UnmarshalCallback> getUnmarshalCallbacks()
    • processObjectFactory

      public JavaClass[] processObjectFactory(JavaClass objectFactoryClass, List<JavaClass> classes)
    • getGlobalElements

      public Map<QName,ElementDeclaration> getGlobalElements()
      Lazy load and return the map of global elements.
      Returns:
    • updateGlobalElements

      public void updateGlobalElements(JavaClass[] classesToProcess)
    • 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 <String, Map<String, TypeInfo>>
      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 -
    • setPackageToPackageInfoMappings

      public void setPackageToPackageInfoMappings(HashMap<String,PackageInfo> packageToPackageInfoMappings)
    • 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()
    • getTypeMappingInfosToGeneratedClasses

      public Map<TypeMappingInfo,Class> getTypeMappingInfosToGeneratedClasses()
    • 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 name
      xmlReg - org.eclipse.persistence.jaxb.xmlmodel.XmlRegistry instance
    • getTypeMappingInfosToSchemaTypes

      public Map<TypeMappingInfo,QName> getTypeMappingInfosToSchemaTypes()
    • setDefaultNamespaceAllowed

      public void setDefaultNamespaceAllowed(boolean isDefaultNamespaceAllowed)
    • isMtomAttachment

      public boolean isMtomAttachment(Property property)
      Indicates if a given Property represents an MTOM attachment. Will return true if the given Property's actual type is one of: - DataHandler - byte[] - Byte[] - Image - Source - MimeMultipart
      Parameters:
      property -
      Returns:
    • hasSwaRef

      public boolean hasSwaRef()
    • setHasSwaRef

      public void setHasSwaRef(boolean swaRef)
    • getReferencedByTransformer

      public List getReferencedByTransformer()
    • isXmlAccessorFactorySupport

      public boolean isXmlAccessorFactorySupport()
      Indicates whether this AnnotationsProcessor has been configured to enable processing of XmlAccessorFactory annotations.
      See Also:
      • "com.sun.xml.bind.XmlAccessorFactory"
    • setXmlAccessorFactorySupport

      public void setXmlAccessorFactorySupport(boolean value)
      Sets whether this AnnotationsProcessor should process XmlAccessorFactory annotations.
      See Also:
      • "com.sun.xml.bind.XmlAccessorFactory"
    • setHasXmlBindings

      public void setHasXmlBindings(boolean b)
    • hasXmlBindings

      public boolean hasXmlBindings()