当前位置: 首页 > 面试题库 >

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

商和雅
2023-03-14
问题内容

嗨,stackoverflow世界,

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

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

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

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

新泽西


问题答案:

问题解决了。

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进行源代码的生成。

我仍在搜索如何手动指定JAXB扩展名(不使用ant或maven进行xjc任务),但现在可以使用。(我有自己的ANT脚本,这就是为什么我搜索手动调用XJC的原因)。

JAXB扩展机制非常方便,请参阅JAXB2基础:http
://confluence.highsource.org/display/J2B/Home




 类似资料:
  • 我一直在使用 annox 在我的 jaxb 生成的类上添加注释(通过绑定文件),但我找不到直接在包上添加注释的方法(包信息.java)。 我一直在尝试在bindings.xml中这样做: 但是jaxb抱怨说< code>annox:annotate不应该在那里。 还有别的方法吗?

  • 我得到了一个XSD,其中包含一个字段。我希望生成的代码使用,这样我就可以对其应用现有接口。(该字段是必填字段,并且永远不会超过32位范围,它应该是)。 使用XJB,我可以更改生成代码中的类型。但是在创建时,这给了我一个错误。 这将生成以下代码 虽然这适用于代码生成,但它在编组时失败,并在创建上下文时引发以下异常。 如果我手动向注释添加一个type参数,问题就解决了,但是我找不到让JAXB为我做这件

  • 我希望创建的XML在头元素中具有xsi: noNamespaceSchemaPlace和xmls: xsi属性(xsi: noNamespaceSchemaPlace="Something.xsd"xmls: xsi="http://www.w3.org/2001/XMLSchema-instance")。以任何方式使用模式——只存储这些属性和值。 对此有具体的注释吗?我可以创建一个恒定的XmlA

  • 我有一个用例,我使用的是基于Spring的外部jar,而我的代码是基于Googleguice的。 我正在尝试通过编写模块在我的依赖项jar的此类中注入依赖项。 外部类: 我可以在我的模块中使用@provides方法中的setter设置成员,但@inject成员为空,我得到了countEvent和durationEvent的NullPointerException。 我的代码使用下面的provide

  • MOXy BeanValide使我能够将验证添加到我的JAXB类中。 使用MOXy的“Bean Validation Plugin”,我可以根据预先存在的模式中的限制/方面在生成的JAXB类中进行Bean验证。 但是,有没有任何方法可以基于JAXB注释的java类的Bean验证注释生成带有限制/facetsb的模式? 在“模式优先”生成java时,XJC有一个方便的插件体系结构,但是是否有任何等效