Как написать внешний файл привязки для xjc?

Документация JAXB xjc гласит:

-b     Укажите один или несколько внешних файлов привязки для обработки. (Каждый файл привязки должен иметь собственный переключатель "-b".) Синтаксис внешних файлов привязки чрезвычайно гибкий. У вас может быть один файл привязки, который содержит настройки для нескольких схем, или вы можете разбить настройки на несколько файлов привязок:

   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 

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

Но где я могу найти документацию этого "внешнего файла привязки"?

Ответы

Ответ 1

Внешний файл привязки документируется на странице Настройка JAXB Bindings на oracle.com

Цитата:

Файлы настройки внешнего привязки

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

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

schemaLocation - это ссылка URI на удаленную схему node является выражением XPath 1.0, которое идентифицирует схему node внутри schemaLocation, к которой привязано данное объявление привязки. Например, первое объявление schemaLocation/node в файле декларации привязки JAXB указывает имя схемы и корневую схему node:

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

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

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

См. также; Параметры компилятора JAXB


Другим хорошим ресурсом для информации о внешнем файле привязки является oreilly. Пример файла привязки из oreilly:

Цитата:

Листинг 11. Использование внешнего файла привязки

<jxb:bindings version="1.0" 
  xmlns:jxb="http://java.sun.com/xml/ns/jaxb" 
  xmlns:xs="http://www.w3.org/2001/XMLSchema" 
  xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" 
  jxb:extensionBindingPrefixes="xjc">
    <jxb:bindings schemaLocation="po4.xsd" node="/xs:schema">
        <jxb:globalBindings>
            <xjc:superClass name="com.syh.Shape"/>
            <xjc:serializable uid="12343"/>
        </jxb:globalBindings>
        <jxb:bindings node="//xs:element[@name='Widgets']//xs:complexType//xs:choice">
            <jxb:property name="Shapes"/>
        </jxb:bindings>
    </jxb:bindings>
</jxb:bindings>