Spec-Zone .ru
спецификации, руководства, описания, API
След: Архитектура Java для XML, Связывающего (JAXB)
Урок: Введение в JAXB
Настройка Привязка JAXB
Домашняя страница > Архитектура Java для XML, Связывающего (JAXB) > Введение в JAXB

Настройка Привязка JAXB

Следующий раздел описывает несколько примеров, которые основываются на понятиях, демонстрируемых в Основных примерах.

Цель этого раздела состоит в том, чтобы иллюстрировать, как настроить привязку JAXB, используя пользовательские обязательные объявления, сделанные одним из следующих двух способов:

В отличие от примеров в Основных Примерах JAXB, которые сосредотачиваются на коде Java в соответствующем Main.java файлы class, примеры здесь сосредотачиваются на настройках, сделанных к XML-схеме прежде, чем генерировать полученный из схемы Java обязательные классы.


Отметьте: JAXB обязательные настройки в настоящий момент должен быть сделан вручную. Одна из целей технологии JAXB состоит в том, чтобы стандартизировать формат обязательных объявлений, таким образом позволяя создать инструменты настройки и обеспечить стандартный формат обмена между реализациями JAXB.

Этот раздел представляет настройки, которые могут быть сделаны к привязке JAXB и методам проверки допустимости. Для получения дополнительной информации см. Спецификацию JAXB.

Почему Настраивают?

В большинстве случаев привязка значения по умолчанию, сгенерированная JAXB обязательный компилятор, достаточна. Есть случаи, однако, в котором Вы могли бы хотеть изменить привязку значения по умолчанию. Некоторые из них включают:

Краткий обзор настройки

Этот раздел объясняет некоторые базовые понятия настройки JAXB:

Встроенные и Внешние Настройки

Настройки к значению по умолчанию привязка JAXB делаются в форме обязательных объявлений, которые передают к JAXB обязательным компилятором. Эти обязательные объявления могут быть сделаны любым из двух способов:

Для некоторых использование встроенных настроек легче, потому что можно видеть свои настройки в контексте схемы, к которой они применяются. Наоборот, использование внешнего обязательного файла настройки позволяет Вам настроить привязку JAXB, не изменяя исходную схему, и позволяет Вам легко применить настройки к нескольким файлам схемы сразу.


Отметьте: можно объединить два типа настроек. Например, Вы могли включать ссылку на внешний обязательный файл настроек во встроенной аннотации. Однако, невозможно объявить и встроенную и внешнюю настройку на том же самом элементе схемы.

Каждый из этих типов настройки описывается более подробно в следующих разделах:

Встроенные Настройки

Настройки к привязке JAXB, сделанной посредством встроенных обязательных объявлений в файле XML-схемы, принимают форму элементов <xsd:appinfo>, встроенных в схему элементы <xsd:annotation> (xsd: является префиксом пространства имен XML-схемы, как определено в Части 1 XML-схемы W3C: Структуры). Общую форму для встроенных настроек показывают в следующем примере:

<xs:annotation>
    <xs:appinfo>
        <!--
        ...
        binding declarations     .
        ...
        -->
    </xs:appinfo>
</xs:annotation>

Настройки применяются в расположении, в котором они объявляются в схеме. Например, объявление на уровне определенного элемента применяется к тому элементу только. Отметьте, что префикс пространства имен XML-схемы должен использоваться с <annotation> и тегами объявления <appinfo>. В предыдущем примере xs: используется в качестве префикса пространства имен, таким образом, объявлениями является теговый <xs:annotation> и <xs:appinfo>.

Внешние Обязательные Файлы Настройки

Настройки к привязке JAXB, сделанной при использовании внешнего файла, содержащего обязательные объявления, примите общую форму, показанную в следующем примере:

<jxb:bindings schemaLocation = "xs:anyURI">
    <jxb:bindings node = "xs:string">*
        <!-- binding declaration -->
    <jxb:bindings>
</jxb:bindings>

Например, первый schemaLocation/node объявление в JAXB обязательный файл объявлений определяет имя схемы и корневой узел схемы:

<jxb:bindings schemaLocation="po.xsd" node="/xs:schema">
</jxb:bindings>

Последующий schemaLocation/node объявление, такое как элемент simpleType под названием ZipCodeType в предыдущем примере схемы, принимает следующую форму:

<jxb:bindings node="//xs:simpleType [@name=’ZipCodeType’]">

Привязка Формата файла Настройки

Обязательные файлы настройки должны быть в тексте ASCII. Имя или расширение не имеют значения; хотя типичным расширением, используемым в этой главе, является .xjb.

Передача Файлов Настройки к JAXB Привязка Компилятора

Файлы настройки, содержащие обязательные объявления, передают к JAXB Обязательный компилятор, xjc, используя следующий синтаксис:

xjc -b file schema

где файл является именем обязательного файла настройки, и схема является именем схем, которые Вы хотите передать к обязательному компилятору.

У Вас может быть единственный обязательный файл, который содержит настройки для многократных схем, или Вы можете seperate настройки в многократные файлы привязки; например:

xjc schema1.xsd schema2.xsd schema3.xsd \
    -b bindings123.xjb
xjc schema1.xsd schema2.xsd schema3.xsd \
    -b bindings1.xjb \
    -b bindings2.xjb \
    -b bindings3.xjb

Отметьте, что упорядочивание файлов схемы и обязательных файлов на командной строке не имеет значения; хотя каждому обязательному файлу настройки должен предшествовать его собственный -b, включают командную строку.

Для получения дополнительной информации об опциях компилятора xjc вообще, см. Опции Компилятора JAXB.

Ограничения для Внешних Обязательных Настроек

Есть несколько правил, которые применяются к обязательным объявлениям, сделанным во внешнем обязательном файле настройки, которые не применяются к подобным объявлениям, сделанным встроенными в исходной схеме:

Точно так же отдельные узлы в пределах схемы, к которой должны быть применены настройки, должны быть определены, используя нотацию XPath; например:

<jxb:bindings node="//xs:complexType [@name=’USAddress’]">

В таких случаях настройка применяется к узлу обязательным компилятором, как будто объявление было встроено встроенное в элементе <xs:appinfo> узла.

Чтобы суммировать эти правила, внешний обязательный элемент, <jxb:bindings> только распознается за то, что он обработал JAXB обязательный компилятор в трех случаях:

Контекст, Наследование, и Приоритет

Значение по умолчанию привязка JAXB может быть настроено или переопределено на четырех разных уровнях, или контекстах.

Следующее число иллюстрирует наследование и приоритет объявлений настройки. Определенно, объявления к вершине пирамиды наследовали и заменяют объявления ниже их.

Компонентные объявления наследовались от и заменяют объявления Определения; объявления Определения наследовали и заменяют объявления Схемы; и объявления Схемы наследовали и заменяют Глобальные объявления.

Иллюстрация: Наследование Контекста Настройки и Приоритет

Наследование Контекста настройки и Приоритет


Синтаксис настройки

Синтаксис для четырех типов JAXB обязательные объявления, синтаксис для типа данных XML к Java обязательные объявления, и префикс пространства имен настройки описывается в следующем разделе.

Глобальные Объявления Привязки

Настройки глобальной области видимости объявляются с <globalBindings>. Синтаксис для настроек глобальной области видимости следующие:

<globalBindings>
    [ collectionType = "collectionType" ]
    [ fixedAttributeAsConstantProperty = "true" | "false" | "1" | "0" ]
    [ generateIsSetMethod = "true" | "false" | "1" | "0" ]
    [ enableFailFastCheck = "true" | "false" | "1" | "0" ]
    [ choiceContentProperty = "true" | "false" | "1" | "0" ]
    [ underscoreBinding = "asWordSeparator" | "asCharInWord" ]
    [ typesafeEnumBase = "typesafeEnumBase" ]
    [ typesafeEnumMemberName = "generateName" | "generateError" ]
    [ enableJavaNamingConventions = "true" | "false" 
    | "1" | "0" ]
    [ bindingStyle = "elementBinding" | "modelGroupBinding" ]
    [ <javaType> ... </javaType> ]*
</globalBindings>

Объявления <globalBindings> только допустимы в элементе annotation верхнего уровня элемент schema. Может только быть единственный экземпляр объявления <globalBindings> в любой данной схеме или обязательном файле объявлений. Если одна исходная схема включает или импортирует вторую исходную схему, объявление <globalBindings> должно быть объявлено в первой исходной схеме.

Схема, Связывающая Объявления

Настройки контекста схемы объявляются с <schemaBindings>. Синтаксис для настроек контекста схемы:

<schemaBindings>
[ <package> package </package> ]
[ <nameXmlTransform> ... </nameXmlTransform> ]*
</schemaBindings>
    
<package 
    [ name = "packageName" ]
    [ <javadoc> ... </javadoc> ]
</package>

<nameXmlTransform>
[ <typeName 
    [ suffix="suffix" ]
    [ prefix="prefix" ] /> ]
[ <elementName 
    [ suffix="suffix" ]
    [ prefix="prefix" ] /> ]
[ <modelGroupName 
    [ suffix="suffix" ]
    [ prefix="prefix" ] /> ]
[ <anonymousTypeName 
    [ suffix="suffix" ]
    [ prefix="prefix" ] /> ]
</nameXmlTransform>

Как показано выше, объявления <schemaBinding> включают два субкомпонента:

Объявления Привязки класса

<class> обязательное объявление позволяет Вам настроить привязку элемента схемы к интерфейсу контента Java или Java интерфейс Element. объявления <class> могут использоваться, чтобы настроить:

Синтаксис для настроек <class>:

<class 
    [ name = "className"]
    [ implClass= "implClass" ] >
    [ <javadoc> ... </javadoc> ]
</class>

Объявления Привязки свойства

<property> обязательное объявление позволяет Вам настроить привязку элемента XML-схемы к его представлению Java как свойство. Контекст настройки может или быть на уровне определения или компонентном уровне в зависимости от того, где <property> обязательное объявление определяется.

Синтаксис для настроек <property>:

<property
    [ name = "propertyName"]
    [ collectionType = "propertyCollectionType" ]
    [ fixedAttributeAsConstantProperty = "true" |
    "false" | "1" | "0" ]
    [ generateIsSetMethod = "true" | 
    "false" | "1" | "0" ]
    [ enableFailFastCheck ="true" | 
    "false" | "1" | "0" ]
    [ <baseType> ... </baseType> ]
    [ <javadoc> ... </javadoc> ]
</property>

<baseType>
    <javaType> ... </javaType>
</baseType>

javaType Привязка Объявлений

Объявление <javaType> обеспечивает способ настроить преобразование типов данных XML к и от типов данных Java. XML обеспечивает больше типов данных чем Java, таким образом, объявление <javaType> позволяет Вам определить пользовательскую привязку типа данных, когда значение по умолчанию привязка JAXB не может достаточно представить Вашу схему.

Целевой тип данных Java может быть Java встроенный тип данных или специализированный тип данных Java. Если специализированный тип данных Java используется в качестве цели, Ваша реализация должна также обеспечить синтаксический анализ и методы печати для немаршалинга и маршалинга данных. С этой целью спецификация JAXB поддерживает parseMethod и printMethod:

Если Вы предпочитаете определять свои собственные преобразования типа данных, JAXB определяет статический class, DatatypeConverter, чтобы помочь в парсинге и печати допустимых лексических представлений XML-схемы встроенным типам данных.

Синтаксис для настройки <javaType>:

<javaType name= "javaType"
    [ xmlType= "xmlType" ]
    [ hasNsContext = "true" | "false" ]
    [ parseMethod= "parseMethod" ]
    [ printMethod= "printMethod" ]>

Объявление <javaType> может использоваться в:

См. Класс MyDatatypeConverter для примера того, как объявления <javaType> и интерфейс DatatypeConverterInterface реализуются в пользовательском преобразователе типа данных class.

Безопасные с точки зрения типов Объявления Привязки Перечисления

Безопасные с точки зрения типов объявления перечисления обеспечивают локализованный способ отобразить XML элементы simpleType на Java классы typesafe enum. Есть два типа безопасных с точки зрения типов объявлений перечисления, которые можно сделать:

В обоих случаях есть два основных ограничения на этот тип настройки:

Синтаксис для настройки <typesafeEnumClass>:

<typesafeEnumClass 
    [ name = "enumClassName" ]
    [ <typesafeEnumMember> ... </typesafeEnumMember> ]*
    [ <javadoc> enumClassJavadoc </javadoc> ]
</typesafeEnumClass>

Синтаксис для настройки <typesafeEnumMember>:

<typesafeEnumMember 
    name = "enumMemberName">
    [ value = "enumMemberValue" ]
    [ <javadoc> enumMemberJavadoc </javadoc> ]
</typesafeEnumMember>

Для встроенных аннотаций объявление <typesafeEnumClass> должно быть определено в элементе аннотации элемента <simpleType>. <typesafeEnumMember> должен быть определен в элементе аннотации элемента перечисления. Это позволяет элементу перечисления быть настроенным независимо от перечисления class.

javadoc Привязка Объявлений

Объявление <javadoc> позволяет Вам добавлять пользовательские аннотации инструмента Javadoc к полученным из схемы пакетам JAXB, классам, интерфейсам, методам, и полям. Отметьте, что объявления <javadoc> не могут быть применены глобально; они только допустимы как подэлементы других обязательных настроек.

Синтаксис для настройки <javadoc>:

<javadoc>
    Contents in <b>Javadoc<\b> format.
</javadoc>

или

<javadoc>
    <<![CDATA[Contents in <b>Javadoc<\b> format ]]>
</javadoc>

Отметьте, что строки документации в объявлениях <javadoc>, примененных на уровне пакета, должны содержать <body> открытые и близкие теги; например:

<jxb:package 
    name="primer.myPo">
    <jxb:javadoc>
        <![CDATA[<body>
            Package level documentation for generated package primer.myPo.
        </body>]]>
    </jxb:javadoc>
</jxb:package>

Префикс Пространства имен настройки

Обязательным объявлениям всего стандартного JAXB должен предшествовать префикс пространства имен, который отображается на URI пространства имен JAXB http://java.sun.com/xml/ns/jaxb. Например, в этой выборке, jxb: используется. С этой целью любая схема, Вы хотите настроить со стандартным JAXB обязательные объявления, должна включать объявление пространства имен JAXB и номер версии JAXB наверху файла схемы. Например, в po.xsd для Настраивания Встроенного примера, объявление пространства имен следующие:

<xsd:schema 
    xmlns:xsd= "http://www.w3.org/2001/XMLSchema"
    xmlns:jxb= "http://java.sun.com/xml/ns/jaxb"
    jxb:version="1.0">

Обязательное объявление с префиксом пространства имен jxb принимает следующую форму:

<xsd:annotation>
    <xsd:appinfo>
    <jxb:globalBindings 
        binding declarations />
    <jxb:schemaBindings>
        ...
        binding declarations         .
        ...
    </jxb:schemaBindings>
    </xsd:appinfo>
</xsd:annotation>

Отметьте, что в этом примере, globalBindings и объявления schemaBindings используются, чтобы определить, соответственно, глобальную область видимости и настройки контекста схемы. Эти контексты настройки описываются более подробно в Контексте, Наследовании, и Приоритете.

Настройте Встроенный Пример

Настраивание Встроенного примера иллюстрирует некоторые основные настройки, сделанные посредством встроенных аннотаций к XML-схеме под названием po.xsd. Кроме того, этот пример реализует пользовательский преобразователь типа данных class, MyDatatypeConverter.java, который иллюстрирует печать и методы синтаксического анализа в настройке <javaType> для того, чтобы обработать пользовательские преобразования типа данных.

Суммировать этот пример:

  1. po.xsd является XML-схемой, содержащей встроенные обязательные настройки.
  2. MyDatatypeConverter.java является Java файл class, который реализует печать и методы синтаксического анализа, определенные настройками <javaType> в po.xsd.
  3. Main.java является основным файлом class в Настраивании Встроенного примера, который использует производные классы схемы, сгенерированные компилятором JAXB.

Создание и Выполнение Настраивания Встроенного Примера Используя Муравья

Чтобы скомпилировать и выполнить Настраивание Встроенного примера, используя Муравья, в окне терминала, идут в jaxb-ri-install/samples/inline-customize/ каталог и вводят следующее:

ant 

Ключевые настройки в этой выборке и пользовательском MyDatatypeConverter.java class описываются более подробно в следующем разделе.

Специализированная Схема

Специализированная схема, используемая в Настраивании Встроенного примера, находится в файле jaxb-ri-install/samples/inline-customize/po.xsd. Настройки находятся в тегах <xsd:annotation>.

Глобальные Объявления Привязки

Следующий пример кода показывает объявления globalBindings в po.xsd:

<jxb:globalBindings
    fixedAttributeAsConstantProperty="true"
    collectionType="java.util.Vector"
    typesafeEnumBase="xsd:NCName"
    choiceContentProperty="false"
    typesafeEnumMemberName="generateError"
    bindingStyle="elementBinding"
    enableFailFastCheck="false"
    generateIsSetMethod="false"
    underscoreBinding="asCharInWord"/>

В этом примере все значения устанавливаются в значения по умолчанию за исключением collectionType.

Схема, Связывающая Объявления

Следующий код показывает схеме обязательные объявления в po.xsd:

<jxb:schemaBindings>
<jxb:package name="primer.myPo">
    <jxb:javadoc>
        <![CDATA[<body>
            Package level documentation for generated package primer.myPo.
        </body>]]>
    </jxb:javadoc>
</jxb:package>
    <jxb:nameXmlTransform>
        <jxb:elementName suffix="Element"/>
    </jxb:nameXmlTransform>
</jxb:schemaBindings>

Объявления Привязки класса

Следующий код показывает class обязательные объявления в po.xsd:

<xsd:complexType name="PurchaseOrderType">
    <xsd:annotation>
        <xsd:appinfo>
            <jxb:class name="POType">
                <jxb:javadoc>
                    A &lt;b>Purchase Order&lt;/b>
                    consists of addresses and items.
                </jxb:javadoc>
            </jxb:class>
        </xsd:appinfo>
    </xsd:annotation>
    <!-- ... -->
</xsd:complexType>

Аннотации инструмента Javadoc для полученного из схемы POType, class будет содержать описание "A &lt;b>Purchase Order&lt;/b> consists of addresses and items." &lt;, используются, чтобы выйти из вводной скобки на HTML-тэгах <b>.


Отметьте: Когда настройка <class> определяется в элементе appinfo определения complexType, как показано в предыдущем примере, определение complexType связывается с интерфейсом контента Java.

Позже в po.xsd, другая настройка <javadoc> объявляется на этом уровне class, но на сей раз строки HTML оставляют с CDATA:

<xsd:annotation>
    <xsd:appinfo>
        <jxb:class>
            <jxb:javadoc>
                <![CDATA[
                    First line of documentation for a
                    <b>USAddress</b>.]]>
            </jxb:javadoc>
        </jxb:class>
    </xsd:appinfo>
</xsd:annotation>

Отметьте: Если Вы хотите включать HTML-тэги в настройку <jaxb:javadoc>, следует включить данные в пределах раздела CDATA или выйти из всех левых угловых скобок, используя &lt;. См. XML 1.0 2-ой Выпуск для получения дополнительной информации.

Объявления Привязки свойства

Особенно интересный вот настройка generateIsSetMethod, которая заставляет два дополнительных метода свойства, isSetQuantity и unsetQuantity, быть сгенерированными. Эти методы позволяют клиентскому приложению различить значения по умолчанию схемы и значения, происходящие явно в пределах документа экземпляра.

Например, в po.xsd:

<xsd:complexType name="Items">
    <xsd:sequence>
        <xsd:element name="item" 
            minOccurs="1"  
            maxOccurs="unbounded">
            <xsd:complexType>
                <xsd:sequence>
                    <xsd:element 
                        name="productName" 
                        type="xsd:string"/>
                    <xsd:element 
                        name="quantity" 
                        default="10">
                        <xsd:annotation>
                            <xsd:appinfo>
                                <jxb:property 
                                    generateIsSetMethod="true"/>
                            </xsd:appinfo>
                        </xsd:annotation>
                        <!-- ... -->
                    </xsd:complexType>
            </xsd:element>
    </xsd:sequence>
</xsd:complexType>

@generateIsSetMethod применяется к элементу quantity, который связывается со свойством в пределах интерфейса Items.ItemType. методы unsetQuantity И isSetQuantity сгенерированы в интерфейсе Items.ItemType.

Класс MyDatatypeConverter

class jaxb-ri-install/samples/inline-customize/src/inlinecustomize/primer/MyDatatypeConverter, показанный в следующем примере, обеспечивает способ настроить преобразование типов данных XML к и от типов данных Java, используя настройку <javaType>.

package primer;
import java.math.BigInteger;
import javax.xml.bind.DatatypeConverter;

public class MyDatatypeConverter {

    public static short parseIntegerToShort(String value) {
        BigInteger result = DatatypeConverter.parseInteger(value);
        return (short)(result.intValue());
    }

    public static String printShortToInteger(short value) {
        BigInteger result = BigInteger.valueOf(value);
        return DatatypeConverter.printInteger(result);
    }

    public static int parseIntegerToInt(String value) {
        BigInteger result = DatatypeConverter.parseInteger(value);
        return result.intValue();
    }

    public static String printIntToInteger(int value) {
        BigInteger result = BigInteger.valueOf(value);
        return DatatypeConverter.printInteger(result);
    }
};

Следующий код показывает, как на MyDatatypeConverter class ссылаются в объявлении <javaType> в po.xsd:

<xsd:simpleType name="ZipCodeType">
<xsd:annotation>
    <xsd:appinfo>
    <jxb:javaType name="int"
        parseMethod="primer.MyDatatypeConverter.parseIntegerToInt"
        printMethod="primer.MyDatatypeConverter.printIntTo Integer" />
    </xsd:appinfo>
</xsd:annotation>
    <xsd:restriction base="xsd:integer">
    <xsd:minInclusive value="10000"/>
    <xsd:maxInclusive value="99999"/>
    </xsd:restriction>
</xsd:simpleType>

В этом примере jxb:javaType обязательное объявление переопределяет значение по умолчанию привязка JAXB этого типа к java.math.BigInteger. В целях Настраивания Встроенного примера ограничения на ZipCodeType (определенно, что допустимые почтовые индексы Соединенных Штатов ограничиваются пятью цифрами) позволяют, что все допустимые значения могут соответствовать в пределах Java примитивному типу данных int. Отметьте также, что, потому что <jxb:javaType name="int"/> объявляется в пределах ZipCodeType, настройка применяется ко всем свойствам JAXB, которые ссылаются на это определение simpleType, включая методы getZip И setZip.

Пример Преобразователя DataType

Пример Преобразователя DataType подобен Настраиванию Встроенного примера. Как с Настраиванием Встроенного примера, настройки в примере Преобразователя Типа данных делаются при использовании встроенных обязательных объявлений в XML-схеме для приложения, po.xsd.

Глобальная переменная, схема, и пакет, и большинство настроек class для Настраивания Встроенного и примеры Преобразователя DataType идентичны. То, где пример Преобразователя Типа данных отличается от Настраивания Встроенного примера, находится в parseMethod и printMethod, используемом для того, чтобы преобразовать данные XML в Java тип данных int.

Определенно, вместо того, чтобы использовать методы в пользовательском MyDataTypeConverter class, чтобы выполнить эти преобразования типа данных, пример Преобразователя Типа данных использует встроенные методы, обеспеченные javax.xml.bind.DatatypeConverter:

<xsd:simpleType name="ZipCodeType">
    <xsd:annotation>
        <xsd:appinfo>
            <jxb:javaType 
                name="int"
                parseMethod="javax.xml.bind.DatatypeConverter.parseInt"
                printMethod="javax.xml.bind.DatatypeConverter.printInt"/>
        </xsd:appinfo>
    </xsd:annotation>
    <xsd:restriction base="xsd:integer">
        <xsd:minInclusive value="10000"/>
        <xsd:maxInclusive value="99999"/>
    </xsd:restriction>
</xsd:simpleType>

Создание и Выполнение Примера Преобразователя Типа данных Используя Муравья

Чтобы скомпилировать и выполнить пример Преобразователя DataType, используя Муравья, в окне терминала, идут в jaxb-ri-install/samples/datatypeconverter/ каталог и вводят следующее:

ant

Привязка Файлов Объявления

Следующие разделы предоставляют информацию об обязательных файлах объявления:

Версия JAXB, Пространство имен, и Атрибуты Схемы

Весь JAXB обязательные файлы объявления должен начаться:

Версия, пространство имен, и объявления схемы в bindings.xjb следующие:

<jxb:bindings 
    version="1.0"
    xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
    xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <jxb:bindings 
        schemaLocation="po.xsd" 
        node="/xs:schema">
            <!-- ...
            binding-declarations 
            ... -->
    </jxb:bindings>
    <!-- 
    schemaLocation="po.xsd" 
    node="/xs:schema" -->
</jxb:bindings>

Номер версии JAXB

XML-файл с корневым элементом <jaxb:bindings> считают внешним обязательным файлом. Корневой элемент должен определить атрибут версии JAXB, которому должны подчиниться его обязательные объявления; определенно корневой элемент <jxb:bindings> должен содержать или <объявление jxb:version> или атрибут version. В отличие от этого, делая обязательные встроенные объявления, номер версии JAXB делается как атрибут объявления <xsd:schema>:

<xsd:schema 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
    jxb:version="1.0">

Объявления пространства имен

Как показано в Версии JAXB, Пространстве имен, и Атрибутах Схемы, объявления пространства имен во внешнем обязательном файле объявлений включают и пространство имен JAXB и пространство имен XMLSchema. Отметьте, что префиксы, используемые в этом примере, могли фактически быть чем-либо, что Вы хотите; важная вещь состоит в том, чтобы последовательно использовать любые префиксы, которые Вы определяете здесь в последующих объявлениях в файле.

Имя схемы и Узел Схемы

Четвертая строка кода в Версии JAXB, Пространстве имен, и Атрибутах Схемы определяет имя схемы, к которой этот обязательный файл объявлений применяется, и узел схемы, в котором сначала вступят в силу настройки. Последующие обязательные объявления в этом файле могут сослаться на определенные узлы в пределах схемы, но это первое объявление должно охватить схему в целом; например, в bindings.xjb:

<jxb:bindings schemaLocation="po.xsd" node="/xs:schema">

Глобальная переменная и Схема, Связывающая Объявления

Глобальная схема обязательные объявления в bindings.xjb является тем же самым как теми в po.xsd для примера Преобразователя DataType. Единственная разница - то, что, потому что объявления в po.xsd делаются встроенными, следует встроить их в элементы <xs:appinfo>, которые поочередно встраиваются в элементы <xs:annotation>. Встраивание объявлений таким образом является ненужным во внешнем файле привязки.

<jxb:globalBindings
    fixedAttributeAsConstantProperty="true"
    collectionType="java.util.Vector"
    typesafeEnumBase="xs:NCName"
    choiceContentProperty="false"
    typesafeEnumMemberName="generateError"
    bindingStyle="elementBinding"
    enableFailFastCheck="false"
    generateIsSetMethod="false"
    underscoreBinding="asCharInWord"/>
    <jxb:schemaBindings>
        <jxb:package name="primer.myPo">
            <jxb:javadoc>
                <![CDATA[<body>
                    Package level documentation for generated package
                    primer.myPo.</body>]]>
                </jxb:javadoc>
        </jxb:package>
        <jxb:nameXmlTransform>
            <jxb:elementName suffix="Element"/>
        </jxb:nameXmlTransform>
    </jxb:schemaBindings>

В сравнении синтаксис, используемый в po.xsd для примера Преобразователя DataType:

<xsd:annotation>
    <xsd:appinfo>
        <jxb:globalBindings
            ...
            binding-declarations
            ...
        <jxb:schemaBindings>
            ...
            binding-declarations
            ...
        </jxb:schemaBindings>
    </xsd:appinfo>
</xsd:annotation>

Объявления класса

class уровни обязательные объявления в bindings.xjb отличается от аналогичных объявлений в po.xsd для примера Преобразователя Типа данных двумя способами:

Например, следующие шоу кода обязательные объявления для complexType по имени USAddress.

<jxb:bindings node="//xs:complexType [@name=’USAddress’]">
    <jxb:class>
        <jxb:javadoc>
            <![CDATA[
                First line of documentation for a <b>USAddress</b>.
            ]]>
        </jxb:javadoc>
    </jxb:class>

<jxb:bindings node=".//xs:element [@name=’name’]">
    <jxb:property name="toName"/>
</jxb:bindings>

<jxb:bindings node=".//xs:element [@name=’zip’]">
    <jxb:property name="zipCode"/>
</jxb:bindings>
</jxb:bindings>
<!-- 
    node="//xs:complexType
    [@name=’USAddress’]" -->

Отметьте в этом примере, что USAddress является родителем дочерних элементов name и zip, и поэтому тег </jxb:bindings> включает объявления bindings для дочерних элементов и class уровень объявление javadoc.

Внешний Настраивают Пример

Внешние Настраивают пример, идентично примеру Преобразователя DataType, за исключением того, что обязательные объявления во Внешнем Настраивают пример, делаются при использовании внешнего обязательного файла объявлений, а не встроенными в исходной XML-схеме.

Обязательный файл настройки, используемый во Внешнем, Настраивает пример, jaxb-ri-install/samples/external-customize/binding.xjb.

Этот раздел сравнивает объявления настройки в bindings.xjb с аналогичными объявлениями, используемыми в XML-схеме, po.xsd, в примере Преобразователя DataType. Два набора объявлений достигают точно тех же самых результатов.

Создание и Выполнение Внешнего Настраивают Пример Используя Муравья

Чтобы скомпилировать и выполнить Внешнее Настраивают пример, используя Муравья, в окне терминала, пойдите в jaxb-ri-install/samples/external-customize/ каталог и введите следующее:

ant

Проблемы с примерами? Попытайтесь Компилировать и Выполнить Примеры: FAQ.
Жалобы? Поздравление? Предложения? Дайте нам свою обратную связь.

Предыдущая страница: Основные Примеры
Следующая страница: Примеры Java к схеме