2015-10-30 2 views
3

Я немного поглядел на google, но я уверен, что кто-то здесь может дать ответ на это быстрее, чем я могу отследить его. Я запускаю XJC2Task (org.jvnet.jaxb2_commons.xjc.XJC2Task) с файлом binding.xjb для генерации источника java из некоторых XSD.JAXB bindings exclude field

Мы изучаем удаление некоторых личных данных, которые мы получаем от третьих лиц от данных. Есть ли способ, чтобы я мог указать некоторые из элементов как @XMLTransient или игнорировать их прямо из файла bindings.xjb?

Так, например, если у меня есть следующие XSD:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema targetNamespace="test.3.0" xmlns="test.3.0" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> 

    <xs:element name="TestInfo" type = "TestInfo"> 
     <xs:annotation> 
      <xs:documentation>TestInfo schema</xs:documentation> 
     </xs:annotation> 
    </xs:element> 
    <xs:complexType name="TestInfo"> 
     <xs:sequence> 
      <xs:element name="name" type="xs:string" minOccurs="0"/> 
      <xs:element name="id" type="xs:string"/> 
     </xs:sequence> 
    </xs:complexType> 

</xs:schema> 

и в моем файле binding.xjb У меня есть

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<jaxb:bindings version="2.1" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" 
       xmlns:xs="http://www.w3.org/2001/XMLSchema" 
       xmlns:inheritance="http://jaxb2-commons.dev.java.net/basic/inheritance" 
       jaxb:extensionBindingPrefixes="inheritance"> 

    <jaxb:globalBindings> 
     <jaxb:serializable uid="1" /> 
    </jaxb:globalBindings> 
    <jaxb:bindings schemaLocation="schema/test.xsd"> 
     <jaxb:schemaBindings> 
      <jaxb:package name="org.test" /> 
     </jaxb:schemaBindings> 
    </jaxb:bindings> 

Есть ли способ, что я могу удалить идентификатор из это? Я надеюсь, что мне не нужно переучивать XSLT, чтобы выполнить это. ; D

+0

Пожалуйста, включите ваш код. – Gemtastic

+3

Вы можете использовать мой [jaxb-annotate-plugin] (https://github.com/highsource/jaxb2-annotate-plugin), чтобы аннотировать 'id' как' @ XmlTransient'. – lexicore

+0

«удалить ... информацию ... из данных»: Что вы подразумеваете под этим? Вы хотите отредактировать XML и создать уменьшенную копию? Вы хотите пропустить XML-элементы во время unmarshalling? Или во время сортировки? – laune

ответ

3

Вы можете использовать эти привязки, используя annox (jaxb2-basics-annotate).

<jaxb:bindings 
    xmlns:jaxb="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" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:annox="http://annox.dev.java.net" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/jaxb http://java.sun.com/xml/ns/jaxb/bindingschema_2_0.xsd" 
    jaxb:extensionBindingPrefixes="xjc annox" 
    version="2.1"> 

    <jaxb:bindings schemaLocation="schema/test.xsd"> 

     <jaxb:bindings 
      node="//xs:complexType[@name='TestInfo']//xs:sequence//xs:element[@name='id']"> 
      <annox:annotate> 
       <annox:annotate annox:class="javax.xml.bind.annotation.XmlTransient"> 
       </annox:annotate> 
      </annox:annotate> 
     </jaxb:bindings> 

    </jaxb:bindings> 
</jaxb:bindings> 
+2

Спасибо lexicore и Xstian за ответы! Именно это я и искал. – Tristan

Смежные вопросы