JAXB绑定排除字段

3

我在谷歌上搜寻了一些资料,但我相信这里的某个人可以比我更快地提供答案。我正在使用binding.xjb文件运行XJC2Task (org.jvnet.jaxb2_commons.xjc.XJC2Task)从一些XSD生成Java源代码。

我们想要从第三方获得的数据中删除一些个人信息。我能否通过bindings.xjb文件将某些元素指定为@XMLTransient或完全忽略它们?

例如,如果我有以下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


请包含您的代码。 - Gemtastic
3
你可以使用我的 jaxb-annotate-pluginid 注解为 @XmlTransient - lexicore
“从数据中删除...信息”是什么意思?您想编辑XML并创建一个缩小的副本吗?您想在取消编组期间跳过XML元素吗?还是在编组期间? - laune
理想情况下,我希望强制使用XML的缩减副本。我不确定是否可以做到这一点,但我认为我也可以通过将XML取消编组为具有XML Transient的对象,然后再次编组来实现这一目标..? - Tristan
1个回答

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接