Class Model

  • All Implemented Interfaces:
    CCustomizable, TypeInfoSet<NType,​NClass,​java.lang.Void,​java.lang.Void>

    public final class Model
    extends java.lang.Object
    implements TypeInfoSet<NType,​NClass,​java.lang.Void,​java.lang.Void>, CCustomizable
    Root of the object model that represents the code that needs to be generated.

    A Model is a schema language neutral representation of the result of a schema parsing. The back-end then works against this model to turn this into a series of Java source code.

    Author:
    Kohsuke Kawaguchi
    • Field Detail

      • schemaComponent

        public final XSSchemaSet schemaComponent
        If this model was built from XML Schema, this field stores the root object of the parse schema model. Otherwise null.
        Since:
        2.1.1
      • codeModel

        public final JCodeModel codeModel
        This model uses this code model exclusively.
      • options

        public final Options options
        Command-line options used for building this model.
      • serializable

        public boolean serializable
        True to generate serializable classes.
      • serialVersionUID

        public java.lang.Long serialVersionUID
        serial version UID to be generated. null if not to generate serialVersionUID field.
      • rootClass

        public JClass rootClass
        If non-null, all the generated classes should eventually derive from this class.
      • rootInterface

        public JClass rootInterface
        If non-null, all the generated interfaces should eventually derive from this interface.
      • strategy

        public ImplStructureStrategy strategy
        Specifies the code generation strategy. Must not be null.
      • defaultSymbolSpace

        public final SymbolSpace defaultSymbolSpace
        Default ID/IDREF symbol space. Any ID/IDREF without explicit reference to a symbol space is assumed to use this default symbol space.
    • Constructor Detail

      • Model

        public Model​(Options opts,
                     JCodeModel cm,
                     NameConverter nc,
                     ClassNameAllocator allocator,
                     XSSchemaSet schemaComponent)
        Parameters:
        nc - Usually this should be set in the constructor, but we do allow this parameter to be initially null, and then set later.
        schemaComponent - The source schema model, if this is built from XSD.
    • Method Detail

      • setNameConverter

        public void setNameConverter​(NameConverter nameConverter)
      • getNameConverter

        public final NameConverter getNameConverter()
        Gets the name converter that shall be used to parse XML names into Java names.
      • isPackageLevelAnnotations

        public boolean isPackageLevelAnnotations()
      • setPackageLevelAnnotations

        public void setPackageLevelAnnotations​(boolean packageLevelAnnotations)
      • getSymbolSpace

        public SymbolSpace getSymbolSpace​(java.lang.String name)
      • generateCode

        public Outline generateCode​(Options opt,
                                    ErrorReceiver receiver)
        Fully-generate the source code into the given model.
        Returns:
        null if there was any errors. Otherwise it returns a valid Outline object, which captures how the model objects are mapped to the generated source code.

        Add-ons can use those information to further augment the generated source code.

      • createTopLevelBindings

        public final java.util.Map<javax.xml.namespace.QName,​CClassInfo> createTopLevelBindings()
        Represents the "top-level binding".

        This is used to support the use of a schema inside WSDL. For XML Schema, the top-level binding is a map from global element declarations to its representation class.

        For other schema languages, it should follow the appendices in WSDL (but in practice no one would use WSDL with a schema language other than XML Schema, so it doesn't really matter.)

        This needs to be filled by the front-end.

      • getTypeInfo

        public CNonElement getTypeInfo​(NType type)
        Description copied from interface: TypeInfoSet
        Returns a TypeInfo for the given type.
        Specified by:
        getTypeInfo in interface TypeInfoSet<NType,​NClass,​java.lang.Void,​java.lang.Void>
        Returns:
        null if the specified type cannot be bound by JAXB, or not known to this set.
      • typeUses

        public java.util.Map<javax.xml.namespace.QName,​TypeUse> typeUses()
      • getElementInfo

        public CElementInfo getElementInfo​(NClass scope,
                                           javax.xml.namespace.QName name)
        Description copied from interface: TypeInfoSet
        Returns a ElementInfo for the given element.
        Specified by:
        getElementInfo in interface TypeInfoSet<NType,​NClass,​java.lang.Void,​java.lang.Void>
        Parameters:
        scope - if null, return the info about a global element. Otherwise return a local element in the given scope if available, then look for a global element next.
      • getElementMappings

        public java.util.Map<javax.xml.namespace.QName,​CElementInfo> getElementMappings​(NClass scope)
        Description copied from interface: TypeInfoSet
        Returns all ElementInfos in the given scope.
        Specified by:
        getElementMappings in interface TypeInfoSet<NType,​NClass,​java.lang.Void,​java.lang.Void>
        Parameters:
        scope - if non-null, this method only returns the local element mapping.
      • getSchemaComponent

        public XSComponent getSchemaComponent()
        Deprecated.
        Always return null. Perhaps you are interested in schemaComponent?
        Description copied from interface: CCustomizable
        If this model object is built from XML Schema, this property returns a schema component from which the model is built.
        Specified by:
        getSchemaComponent in interface CCustomizable
        Returns:
        null if the model is built from sources other than XML Schema (such as DTD.)
      • getLocator

        public org.xml.sax.Locator getLocator()
        Deprecated.
        No line number available for the "root" component.
        Description copied from interface: CCustomizable
        Gets the source location in the schema from which this model component is created.
        Specified by:
        getLocator in interface CCustomizable
        Returns:
        never null.
      • getXmlNs

        public java.util.Map<java.lang.String,​java.lang.String> getXmlNs​(java.lang.String namespaceUri)
        Not implemented in the compile-time model.
        Specified by:
        getXmlNs in interface TypeInfoSet<NType,​NClass,​java.lang.Void,​java.lang.Void>
        Returns:
        A map from prefixes to namespace URIs, which should be declared when generating a schema. Could be empty but never null.
      • getSchemaLocations

        public java.util.Map<java.lang.String,​java.lang.String> getSchemaLocations()
        Description copied from interface: TypeInfoSet
        Gets XmlSchema.location() found in this context.

        This operation is expected to be only used in schema generator, so it can be slow.

        Specified by:
        getSchemaLocations in interface TypeInfoSet<NType,​NClass,​java.lang.Void,​java.lang.Void>
        Returns:
        A map from namespace URI to the value of the location. If the entry is missing, that means a schema should be generated for that namespace. If the value is "", that means the schema location is implied (<xs:schema namespace="..."/> w/o schemaLocation.)
      • getElementFormDefault

        public javax.xml.bind.annotation.XmlNsForm getElementFormDefault​(java.lang.String nsUri)
        Description copied from interface: TypeInfoSet
        Gets the reasonable XmlNsForm for the given namespace URI.

        The spec doesn't define very precisely what the XmlNsForm value for the given namespace would be, so this method is implemented in rather ad-hoc way. It should work as what most people expect for simple cases.

        Specified by:
        getElementFormDefault in interface TypeInfoSet<NType,​NClass,​java.lang.Void,​java.lang.Void>
        Returns:
        never null.
      • getAttributeFormDefault

        public javax.xml.bind.annotation.XmlNsForm getAttributeFormDefault​(java.lang.String nsUri)
        Description copied from interface: TypeInfoSet
        Gets the reasonable XmlNsForm for the given namespace URI.

        The spec doesn't define very precisely what the XmlNsForm value for the given namespace would be, so this method is implemented in rather ad-hoc way. It should work as what most people expect for simple cases.

        Specified by:
        getAttributeFormDefault in interface TypeInfoSet<NType,​NClass,​java.lang.Void,​java.lang.Void>
        Returns:
        never null.
      • dump

        public void dump​(javax.xml.transform.Result out)
        Description copied from interface: TypeInfoSet
        Dumps this model into XML. For debug only. TODO: not sure if this actually works. We don't really know what are T,C.
        Specified by:
        dump in interface TypeInfoSet<NType,​NClass,​java.lang.Void,​java.lang.Void>