2015-10-30 82 views
3

我已经环视了一下谷歌,但我敢肯定这里的某个人可以提供比我更快地追踪它的答案。我使用binding.xjb文件运行XJC2Task(org.jvnet.jaxb2_commons.xjc.XJC2Task)以从一些XSD生成Java源代码。JAXB绑定排除字段

我们正在寻求删除我们从第三方收到的一些个人信息。有没有一种方法可以将@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> 

有没有办法,我可以删除ID方式这个? 我希望我不必重新学习XSLT来完成此任务。 ; D

+0

请包括您的代码。 – Gemtastic

+3

您可以使用我的[jaxb-annotate-plugin](https://github.com/highsource/jaxb2-annotate-plugin)将'id'注释为'@ XmlTransient'。 – lexicore

+0

“从数据中删除......信息......”:你是什么意思?你想编辑XML并创建缩减的副本吗?您想在解组期间跳过XML元素吗?或在编组期间? – 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