从模式向JAXB绑定类添加注释

时间:2012-01-02 15:31:28

标签: java annotations jaxb

你好stackoverflow世界,

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

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

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

有谁知道那是怎么回事? 谢谢!

NJ

1 个答案:

答案 0 :(得分:15)

问题解决了。

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基础知识: http://confluence.highsource.org/display/J2B/Home