【问题标题】:How to add @XmlTransient annotation with XJC for properties如何使用 XJC 为属性添加 @XmlTransient 注释
【发布时间】:2014-03-09 18:57:21
【问题描述】:

我有一个 XSD,想将一些属性标记为 XmlTransient,这样这些属性将由 XJC 在 Java 中生成,并被 JAXB 编组和解组忽略。

我可以修改 XSD,但不知道应该在 xs:annotation 标记中添加什么来自定义 JAXB 绑定。

到目前为止,这是我的 XSD

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:hj="http://hyperjaxb3.jvnet.org/ejb/schemas/customizations" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:orm="http://java.sun.com/xml/ns/persistence/orm" jaxb:extensionBindingPrefixes="hj orm">
  <xs:complexType name="tripRegisterType">
    <xs:annotation>
      <xs:appinfo>
        <hj:entity>
          <orm:table name="simplemaketripprocess_tripregistertype" />
        </hj:entity>
        <hj:generated-id name="tripregistertypeid" />
      </xs:appinfo>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="startDate" type="xs:date">
        <xs:annotation>
          <xs:appinfo>
            <hj:basic>
              <orm:column name="startDate" column-definition="timestamp" />
            </hj:basic>
          </xs:appinfo>
        </xs:annotation>
      </xs:element>
      <xs:element name="endDate" type="xs:date">
        <xs:annotation>
          <xs:appinfo>
            <hj:basic>
              <orm:column name="endDate" column-definition="timestamp" />
            </hj:basic>
          </xs:appinfo>
        </xs:annotation>
      </xs:element>
      <xs:element name="want_flight" type="xs:boolean" />
      <xs:element name="want_hotel" type="xs:boolean" />
      <xs:element name="want_car" type="xs:boolean" />
      <xs:element name="payAccNumber" type="xs:string" />

      <!-- THE NEXT COLOUMS I'D LIKE TO BE XML TRANSIENT-->

      <xs:element name="companyid" type="xs:long" />
      <xs:element name="groupid" type="xs:long" />
      <xs:element name="userid" type="xs:long" />
      <xs:element name="username" type="xs:string" />
      <xs:element name="createDate" type="xs:date">
        <xs:annotation>
          <xs:appinfo>
            <hj:basic>
              <orm:column name="createDate" column-definition="timestamp" />
            </hj:basic>
          </xs:appinfo>
        </xs:annotation>
      </xs:element>
      <xs:element name="modifiedDate" type="xs:date">
        <xs:annotation>
          <xs:appinfo>
            <hj:basic>
              <orm:column name="modifiedDate" column-definition="timestamp" />
            </hj:basic>
          </xs:appinfo>
        </xs:annotation>
      </xs:element>
    </xs:sequence>
  </xs:complexType>
</xs:schema>

【问题讨论】:

  • schema代表了实例的结构,所以如果在schema里面就在instance里面。如果您不想用 XML 表示数据,只需将其从 XSD 中删除。您可以对生成的类进行子类化并添加标记为 @XmlTransient 的新属性,这些属性不会保留在 XML 中。

标签: java jaxb xsd hyperjaxb xmltransient


【解决方案1】:

为此尝试Annotate 插件。 (免责声明:我是作者。) @XmlRootElement 有一个例子,@XmlTransient 类似。

<annox:annotate target="class">
    <annox:annotate annox:class="javax.xml.bind.annotation.XmlRootElement"
       namespace="someNamespace"/>
</annox:annotate>

【讨论】:

  • 我正在尝试使用相同的想法来标记字段瞬态。但似乎不起作用。
  • @MandarKulkarni 不幸的是,这是“不起作用”评论的类型,没有人可以做任何事情。问另一个问题,详细描述你的问题,展示你到目前为止所做的尝试,然后也许你会得到帮助。至于现在“似乎不起作用”的答案是,也许你做错了什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-13
  • 1970-01-01
  • 1970-01-01
  • 2022-10-13
  • 1970-01-01
  • 2018-06-26
  • 1970-01-01
相关资源
最近更新 更多