java - 从模式向 JAXB 绑定(bind)类添加注释

标签 java annotations jaxb

嗨 stackoverflow 世界,

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

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

我使用外部 JAXB 定制(.xjb 文件)。 此处的目的是不修改架构(因为它们正在定义标准)。

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

新泽西州

最佳答案

问题已解决。

JAXB 插件注释 http://confluence.highsource.org/display/J2B/Annotate+Plugin做这份工作。

在您的 jaxb 绑定(bind)文件(外部绑定(bind),即 .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

关于java - 从模式向 JAXB 绑定(bind)类添加注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8702559/

相关文章:

xml - Scala:jaxb 或类似的?

java - JAXB,使用 xml 属性作为 hashmap 中的键

java - 标准 JSON 表示

java - Spring /hibernate : Bidirectional Mapping without synchronization for JPQL queries only

java - 我正在尝试在 android 中运行前台服务,但每当我运行我的应用程序时,应用程序就会卡住并且不显示任何通知

java - 我尝试通过 Java 使用代理,但不断收到 "Use getHelp to get to the guidelines about reporter tool.Report"

java - 将字符串 Java 中的阿拉伯逗号替换为英文

java - 使用java注释和反射获取java.lang.NullPointerException

annotations - 机器学习的二维平面图(图像)数据集

hibernate - @EntityListener 是否也适用于 @MappedSuperclass?