Class SchemaGenerator


  • public class SchemaGenerator
    extends java.lang.Object
    INTERNAL:

    Purpose:To generate Schema objects based on a map of TypeInfo objects, and some additional information gathered by the AnnotationsProcessing phase.

    Responsibilities:

    • Create and maintain a collection of Schema objects based on the provided TypeInfo objects
    • Add additional global elements to the schema based on an optional map (for WS integration)
    • Should create a schema for each namespace encountered during generation.

    This class is used by the Generator to handle the generation of Schemas. The Generator passes in a map of TypeInfo objects, generated by the Annotations processor. The generated Schemas are stored in a map of keyed on Target Namespace.

    Since:
    Oracle TopLink 11.1.1.0.0
    Author:
    mmacivor
    See Also:
    TypeInfo, AnnotationsProcessor, Generator
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void addGlobalElements​(java.util.Map<javax.xml.namespace.QName,​ElementDeclaration> additionalElements)  
      void addSchemaComponents​(JavaClass myClass)  
      void addToSchemaType​(TypeInfo ownerTypeInfo, java.util.List<Property> properties, org.eclipse.persistence.internal.oxm.schema.model.TypeDefParticle compositor, org.eclipse.persistence.internal.oxm.schema.model.ComplexType type, org.eclipse.persistence.internal.oxm.schema.model.Schema workingSchema)  
      org.eclipse.persistence.internal.oxm.schema.model.Attribute createGlobalAttribute​(org.eclipse.persistence.internal.oxm.XPathFragment frag, org.eclipse.persistence.internal.oxm.schema.model.Schema workingSchema, org.eclipse.persistence.internal.oxm.schema.model.Schema fragSchema, Property prop)
      Create a global attribute.
      org.eclipse.persistence.internal.oxm.schema.model.Element createGlobalElement​(org.eclipse.persistence.internal.oxm.XPathFragment frag, org.eclipse.persistence.internal.oxm.schema.model.Schema workingSchema, org.eclipse.persistence.internal.oxm.schema.model.Schema fragSchema, boolean isChoice, boolean isUnbounded, Property prop, boolean shouldSetType)
      Create a global element.
      org.eclipse.persistence.internal.oxm.schema.model.Attribute createRefAttribute​(java.lang.String attributeRefName, org.eclipse.persistence.internal.oxm.schema.model.ComplexType owningComplexType)
      Create an attribute reference and add it to a given complex type.
      org.eclipse.persistence.internal.oxm.schema.model.Element createRefElement​(java.lang.String elementRefName, org.eclipse.persistence.internal.oxm.schema.model.TypeDefParticle particle)
      Create an element reference and add it to a given particle.
      void generateSchema​(java.util.List<JavaClass> typeInfoClasses, java.util.Map<java.lang.String,​TypeInfo> typeInfo, java.util.Map<java.lang.String,​javax.xml.namespace.QName> userDefinedSchemaTypes, java.util.Map<java.lang.String,​PackageInfo> packageToPackageInfoMappings, java.util.Map<javax.xml.namespace.QName,​ElementDeclaration> additionalGlobalElements, java.util.Map<java.lang.String,​java.lang.Class> arrayClassesToGeneratedClasses)  
      void generateSchema​(java.util.List<JavaClass> typeInfoClasses, java.util.Map<java.lang.String,​TypeInfo> typeInfo, java.util.Map<java.lang.String,​javax.xml.namespace.QName> userDefinedSchemaTypes, java.util.Map<java.lang.String,​PackageInfo> packageToPackageInfoMappings, java.util.Map<javax.xml.namespace.QName,​ElementDeclaration> additionalGlobalElements, java.util.Map<java.lang.String,​java.lang.Class> arrayClassesToGeneratedClasses, javax.xml.bind.SchemaOutputResolver outputResolver)  
      java.util.Collection<org.eclipse.persistence.internal.oxm.schema.model.Schema> getAllSchemas()  
      java.util.ArrayList<java.lang.Object> getEnumerationFacetsFor​(EnumTypeInfo info)  
      NamespaceInfo getNamespaceInfoForNamespace​(java.lang.String namespace)  
      NamespaceInfo getNamespaceInfoForNamespace​(java.lang.String namespace, java.lang.String packageName)  
      java.lang.String getOrGeneratePrefixForNamespace​(java.lang.String URI, org.eclipse.persistence.internal.oxm.schema.model.Schema schema)
      Attempt to resolve the given URI to a prefix.
      java.lang.String getPrefixForNamespace​(org.eclipse.persistence.internal.oxm.schema.model.Schema schema, java.lang.String URI)  
      javax.xml.namespace.QName getSchemaTypeFor​(JavaClass javaClass)
      Return the schema type (as QName) based on a given JavaClass.
      java.util.Map<java.lang.String,​SchemaTypeInfo> getSchemaTypeInfo()
      Return the Map of SchemaTypeInfo instances.
      java.lang.String getSchemaTypeNameForClassName​(java.lang.String className)  
      Property getXmlValueFieldForSimpleContent​(TypeInfo info)  
      boolean isCollectionType​(Property field)
      Indicates if a given Property is a collection type.
      void populateSchemaTypes()  
      • Methods inherited from class java.lang.Object

        equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • SchemaGenerator

        public SchemaGenerator​(Helper helper)
    • Method Detail

      • generateSchema

        public void generateSchema​(java.util.List<JavaClass> typeInfoClasses,
                                   java.util.Map<java.lang.String,​TypeInfo> typeInfo,
                                   java.util.Map<java.lang.String,​javax.xml.namespace.QName> userDefinedSchemaTypes,
                                   java.util.Map<java.lang.String,​PackageInfo> packageToPackageInfoMappings,
                                   java.util.Map<javax.xml.namespace.QName,​ElementDeclaration> additionalGlobalElements,
                                   java.util.Map<java.lang.String,​java.lang.Class> arrayClassesToGeneratedClasses,
                                   javax.xml.bind.SchemaOutputResolver outputResolver)
      • generateSchema

        public void generateSchema​(java.util.List<JavaClass> typeInfoClasses,
                                   java.util.Map<java.lang.String,​TypeInfo> typeInfo,
                                   java.util.Map<java.lang.String,​javax.xml.namespace.QName> userDefinedSchemaTypes,
                                   java.util.Map<java.lang.String,​PackageInfo> packageToPackageInfoMappings,
                                   java.util.Map<javax.xml.namespace.QName,​ElementDeclaration> additionalGlobalElements,
                                   java.util.Map<java.lang.String,​java.lang.Class> arrayClassesToGeneratedClasses)
      • addSchemaComponents

        public void addSchemaComponents​(JavaClass myClass)
      • addToSchemaType

        public void addToSchemaType​(TypeInfo ownerTypeInfo,
                                    java.util.List<Property> properties,
                                    org.eclipse.persistence.internal.oxm.schema.model.TypeDefParticle compositor,
                                    org.eclipse.persistence.internal.oxm.schema.model.ComplexType type,
                                    org.eclipse.persistence.internal.oxm.schema.model.Schema workingSchema)
      • getSchemaTypeFor

        public javax.xml.namespace.QName getSchemaTypeFor​(JavaClass javaClass)
        Return the schema type (as QName) based on a given JavaClass.
        Parameters:
        javaClass -
        Returns:
      • populateSchemaTypes

        public void populateSchemaTypes()
      • getSchemaTypeNameForClassName

        public java.lang.String getSchemaTypeNameForClassName​(java.lang.String className)
      • getEnumerationFacetsFor

        public java.util.ArrayList<java.lang.Object> getEnumerationFacetsFor​(EnumTypeInfo info)
      • getXmlValueFieldForSimpleContent

        public Property getXmlValueFieldForSimpleContent​(TypeInfo info)
      • isCollectionType

        public boolean isCollectionType​(Property field)
        Indicates if a given Property is a collection type.
        Parameters:
        field -
        Returns:
      • getAllSchemas

        public java.util.Collection<org.eclipse.persistence.internal.oxm.schema.model.Schema> getAllSchemas()
      • getNamespaceInfoForNamespace

        public NamespaceInfo getNamespaceInfoForNamespace​(java.lang.String namespace)
      • getNamespaceInfoForNamespace

        public NamespaceInfo getNamespaceInfoForNamespace​(java.lang.String namespace,
                                                          java.lang.String packageName)
      • getPrefixForNamespace

        public java.lang.String getPrefixForNamespace​(org.eclipse.persistence.internal.oxm.schema.model.Schema schema,
                                                      java.lang.String URI)
      • getOrGeneratePrefixForNamespace

        public java.lang.String getOrGeneratePrefixForNamespace​(java.lang.String URI,
                                                                org.eclipse.persistence.internal.oxm.schema.model.Schema schema)
        Attempt to resolve the given URI to a prefix. If this is unsuccessful, one will be generated and added to the resolver.
        Parameters:
        URI -
        schema -
        Returns:
      • addGlobalElements

        public void addGlobalElements​(java.util.Map<javax.xml.namespace.QName,​ElementDeclaration> additionalElements)
      • getSchemaTypeInfo

        public java.util.Map<java.lang.String,​SchemaTypeInfo> getSchemaTypeInfo()
        Return the Map of SchemaTypeInfo instances. The Map is keyed on JavaClass qualified name.
        Returns:
      • createGlobalAttribute

        public org.eclipse.persistence.internal.oxm.schema.model.Attribute createGlobalAttribute​(org.eclipse.persistence.internal.oxm.XPathFragment frag,
                                                                                                 org.eclipse.persistence.internal.oxm.schema.model.Schema workingSchema,
                                                                                                 org.eclipse.persistence.internal.oxm.schema.model.Schema fragSchema,
                                                                                                 Property prop)
        Create a global attribute. An import is added if necessary. This method will typically be called when processing an XPath and a prefixed path element is encountered tha requires an attribute ref.
        Parameters:
        frag -
        workingSchema -
        fragSchema -
        prop -
        Returns:
      • createGlobalElement

        public org.eclipse.persistence.internal.oxm.schema.model.Element createGlobalElement​(org.eclipse.persistence.internal.oxm.XPathFragment frag,
                                                                                             org.eclipse.persistence.internal.oxm.schema.model.Schema workingSchema,
                                                                                             org.eclipse.persistence.internal.oxm.schema.model.Schema fragSchema,
                                                                                             boolean isChoice,
                                                                                             boolean isUnbounded,
                                                                                             Property prop,
                                                                                             boolean shouldSetType)
        Create a global element. An import is added if necessary. This method will typically be called when processing an XPath and a prefixed path element is encountered the requires an element ref.
        Parameters:
        frag - XPathFragment which wil lbe used to create the global element
        workingSchema - current schema
        fragSchema - frag's schema
        isChoice - indicates if we need to construct a choice
        isUnbounded - maxOccurs setting for choice
        prop - property which owns the xml-path
        shouldSetType - if this is the last fragment in the xml-path and not an 'any', we should set the type
        Returns:
      • createRefElement

        public org.eclipse.persistence.internal.oxm.schema.model.Element createRefElement​(java.lang.String elementRefName,
                                                                                          org.eclipse.persistence.internal.oxm.schema.model.TypeDefParticle particle)
        Create an element reference and add it to a given particle. This method will typically be called when processing an XPath and a prefixed path element is encountered that requires an element ref.
        Parameters:
        elementRefName -
        particle -
        Returns:
      • createRefAttribute

        public org.eclipse.persistence.internal.oxm.schema.model.Attribute createRefAttribute​(java.lang.String attributeRefName,
                                                                                              org.eclipse.persistence.internal.oxm.schema.model.ComplexType owningComplexType)
        Create an attribute reference and add it to a given complex type. This method will typically be called when processing an XPath and a prefixed path element is encountered that requires an attribute ref.
        Parameters:
        attributeRefName -
        owningComplexType -
        Returns: