javax.xml.bind.annotation

## Annotation Type XmlSchema

-     @Retention(value=RUNTIME)
       @Target(value=PACKAGE)
      public @interface XmlSchema

  Maps a package name to a XML namespace.

  ### Usage

  The XmlSchema annotation can be used with the following program elements:

  - package

  This is a package level annotation and follows the recommendations and restrictions contained in JSR 175, section III, "Annotations". Thus the usage is subject to the following constraints and recommendations.

  - There can only be one package declaration as noted in JSR 175, section III, "Annotations".
  - JSR 175 recommends package-info.java for package level annotations. JAXB Providers that follow this recommendation will allow the package level annotations to be defined in package-info.java.

  Example 1: Customize name of XML namespace to which package is mapped.

          @javax.xml.bind.annotation.XmlSchema (
            namespace = "http://www.example.com/MYPO1"
          )

          <!-- XML Schema fragment -->
          <schema
            xmlns=...
            xmlns:po=....
            targetNamespace="http://www.example.com/MYPO1"
          >
          <!-- prefixes generated by default are implementation
                  depedenent -->

  Example 2: Customize namespace prefix, namespace URI mapping

          // Package level annotation
          @javax.xml.bind.annotation.XmlSchema (
            xmlns = {
              @javax.xml.bind.annotation.XmlNs(prefix = "po",
                         namespaceURI="http://www.example.com/myPO1"),

              @javax.xml.bind.annotation.XmlNs(prefix="xs",
                         namespaceURI="http://www.w3.org/2001/XMLSchema")
            )
          )

          <!-- XML Schema fragment -->
          <schema
              xmlns:xs="http://www.w3.org/2001/XMLSchema"
              xmlns:po="http://www.example.com/PO1"
              targetNamespace="http://www.example.com/PO1">

  Example 3: Customize elementFormDefault

          @javax.xml.bind.annotation.XmlSchema (
            elementFormDefault=XmlNsForm.UNQUALIFIED
            ...
          )

          <!-- XML Schema fragment -->
          <schema
              xmlns="http://www.w3.org/2001/XMLSchema"
              xmlns:po="http://www.example.com/PO1"
              elementFormDefault="unqualified">

  Since:
    JAXB2.0

- - ### Field Summary

    Fields
    Modifier and Type | Fields | Description
    --- | --- | ---
    `static String` | `NO_LOCATION` | The default value of the `location()` attribute, which indicates that the schema generator will generate components in this namespace.

  - ### Optional Element Summary

    Optional Elements
    Modifier and Type | Optional Element | Description
    --- | --- | ---
    `XmlNsForm` | `attributeFormDefault` | Namespace qualification for attributes.
    `XmlNsForm` | `elementFormDefault` | Namespace qualification for elements.
    `String` | `location` | Indicates that this namespace (specified by `namespace()`) has a schema already available exeternally, available at this location.
    `String` | `namespace` | Name of the XML namespace.
    `XmlNs[]` | `xmlns` | Customize the namespace URI, prefix associations.

- - ### Field Detail

    - #### NO_LOCATION

          public static final String NO_LOCATION

      The default value of the `location()` attribute, which indicates that the schema generator will generate components in this namespace.

  - ### Element Detail

    - #### xmlns

          public abstract XmlNs[] xmlns

      Customize the namespace URI, prefix associations. By default, the namespace prefixes for a XML namespace are generated by a JAXB Provider in an implementation dependent way.
      Default:
        {}

  - - #### namespace

          public abstract String namespace

      Name of the XML namespace.
      Default:
        ""

  - - #### elementFormDefault

          public abstract XmlNsForm elementFormDefault

      Namespace qualification for elements. By default, element default attribute will be absent from the XML Schema fragment.
      Default:
        javax.xml.bind.annotation.XmlNsForm.UNSET

  - - #### attributeFormDefault

          public abstract XmlNsForm attributeFormDefault

      Namespace qualification for attributes. By default, attributesFormDefault will be absent from the XML Schema fragment.
      Default:
        javax.xml.bind.annotation.XmlNsForm.UNSET

  - - #### location

          public abstract String location

      Indicates that this namespace (specified by `namespace()`) has a schema already available exeternally, available at this location.

      This instructs the JAXB schema generators to simply refer to the pointed schema, as opposed to generating components into the schema. This schema is assumed to match what would be otherwise produced by the schema generator (same element names, same type names...)

      This feature is intended to be used when a set of the Java classes is originally generated from an existing schema, hand-written to match externally defined schema, or the generated schema is modified manually.

      Value could be any absolute URI, like `http://example.org/some.xsd`. It is also possible to specify the empty string, to indicate that the schema is externally available but the location is unspecified (and thus it's the responsibility of the reader of the generate schema to locate it.) Finally, the default value of this property `"##generate"` indicates that the schema generator is going to generate components for this namespace (as it did in JAXB 2.0.)

      Multiple `XmlSchema` annotations on multiple packages are allowed to govern the same `namespace()`. In such case, all of them must have the same `location()` values.

      ### Note to implementor

      More precisely, the value must be either `""`, `"##generate"`, or a valid lexical representation of `xs:anyURI` that begins with `<scheme>:`.

      A schema generator is expected to generate a corresponding `<xs:import namespace="..." schemaLocation="..."/>` (or no `schemaLocation` attribute at all if the empty string is specified.) However, the schema generator is allowed to use a different value in the `schemaLocation` attribute (including not generating such attribute), for example so that the user can specify a local copy of the resource through the command line interface.

      Since:
        JAXB2.1
      Default:
        "##generate"

Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2026, Oracle and/or its affiliates. All rights reserved. Use is subject to license terms. Also see the documentation redistribution policy.