【问题标题】:adding an annotation to a JAXB binding class from a schema从模式向 JAXB 绑定类添加注释
【发布时间】:2012-01-02 15:31:28
【问题描述】:

你好 stackoverflow 世界,

我想在 XSD 中指定特定元素可以被 JAXB 用作 XmlRootElement。

我知道如何将注解添加到生成的类中:我要做的是在代码生成之前指定一个元素可以作为根元素生成。

我使用外部 JAXB 自定义(.xjb 文件)。 目的是不修改模式(因为它们正在定义标准)。

有人知道怎么做吗? 谢谢!

新泽西

【问题讨论】:

标签: java annotations jaxb


【解决方案1】:

问题解决了。

JAXB 插件 Annotate http://confluence.highsource.org/display/J2B/Annotate+Plugin 完成这项工作。

在您的 jaxb 绑定文件(外部绑定,即 .xjb 文件)中添加以下片段:

<jaxb:bindings schemaLocation="csw/2.0.2/CSW-discovery.xsd" node="/xs:schema">
  <jaxb:bindings node="xs:complexType[@name='GetRecordsType']">
    <annox:annotate>
  <annox:annotate annox:class="javax.xml.bind.annotation.XmlRootElement"
                 name="GetRecordsType" />
</annox:annotate>
  </jaxb:bindings>
</jaxb:bindings>

不要忘记声明命名空间:

<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>

并使用 ANT 或 MAVEN 任务 http://confluence.highsource.org/display/J2B/User+Guide 继续生成源代码。

我仍在搜索如何手动指定(没有使用 ant 或 maven 的 xjc 任务)JAXB 扩展,但它现在可以工作了。 (我有自己的 ANT 脚本,这就是我搜索手动调用 XJC 的原因)。

JAXB扩展机制很方便,看看JAXB2 Basics: http://confluence.highsource.org/display/J2B/Home

【讨论】:

  • 如何添加@something({@some("a"),@some("b")}) 等注解?
  • 确实 confluence.highsource.org/... 似乎不可用,但您是否在 Web 上搜索过?例如...谷歌? ==> github.com/highsource/jaxb2-annotate-plugin
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多