Как мне указать, чтобы мой вывод JAXB включал ссылку на XSD, который его создал?

#jaxb #xsd

#jaxb #xsd

Вопрос:

Вот мои страницы.xsd

 <?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns:mac="http://www.tvworks.com/tva/xml/ns/max/data-types" 
           elementFormDefault="qualified"
           attributeFormDefault="unqualified">

 <xs:import namespace="http://www.tvworks.com/tva/xml/ns/max/data-types" 
            schemaLocation="http://developer.tva.tvworks.com/xml/ns/max/data-types-3.2.xsd"/>


 <xs:element name="data">
  <xs:complexType>
   <xs:sequence>
    <xs:element name="scenes" type="scenesType"/>
   </xs:sequence>
  </xs:complexType>
 </xs:element>

 <xs:complexType name="scenesType">
  <xs:sequence>
   <xs:element name="row" minOccurs="1" maxOccurs="unbounded">
    <xs:complexType>
     <xs:sequence>
      <xs:element name="page" type="mac:page-ref"/>
     </xs:sequence>
    </xs:complexType>
   </xs:element>
  </xs:sequence>
 </xs:complexType>
</xs:schema>
  

Вот мои страницы.xjb

 <bindings xmlns="http://java.sun.com/xml/ns/jaxb"
          xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance"
          xmlns:xsd="http://www.w3.org/2001/XMLSchema"
          version="2.1">
    <bindings schemaLocation="pages.xsd" version="1.0"">
        <schemaBindings>
            <package name="com.mycompany.pages"/>
        </schemaBindings>
    </bindings>
</bindings>
  

Вот как я хочу, чтобы вывод выглядел, обратите внимание xsi:noNamespaceSchemaLocation="pages.xsd" .

 <data xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:noNamespaceSchemaLocation="pages.xsd">
 <scenes>
  <row>
   <page>page1</page>
  </row>
  <row>
   <page>page2</page>
  </row>
    <row>
   <page>page3</page>
  </row>
    <row>
   <page>page4</page>
  </row>
 </scenes>
</data> 
  

Как мне автоматически добавить этот атрибут к data элементу, выводимому JAXB?

Ответ №1:

Установите свойство jaxb.noNamespaceSchemaLocation с желаемым значением на вашем Marshaller .

РЕДАКТИРОВАТЬ: проверьте раздел о поддерживаемых свойствах в документации маршаллера, а также метод setProperty для получения дополнительной информации.