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