如何使用xjc和自定义绑定生成XMLElementWrapper注释

我正在使用JAXB和xjc将我的XML Schema编译为Java类。 我不想手动编辑这个生成的类。 我有像这样的xml架构:

             

xjc生成一个仅包含Item对象列表的Item 。 有没有机会省略类Items并直接在Root类中列出Item对象?

我知道这可以用@XMLElementWrapper注释完成,但我不知道如何告诉xjc创建这样的注释。

谢谢你的任何建议!

最好的问候,马库斯

Bjarne Hansen开发了一个xjc插件,可以解决这个问题。 不幸的是,原始实现的链接现在已经死了。 然而,Dmitry Katsubo在github上有一个项目,基于Bjarne的原始代码并进行了一些额外的改进。

→ https://github.com/dmak/jaxb-xew-plugin


(仅供参考:原始链接,现已死: http : //www.conspicio.dk/blog/bjarne/jaxb-xmlelementwrapper-plugin )

首先让我们分解你的模式,这样就不会生成内部类:

               

你仍然会得到额外的课程,而不是一个文件。 现在,您要在构建中添加一个部分以使用jaxb-xew-plugin 。 我使用Maven,所以对我来说这看起来像:

  org.jvnet.jaxb2.maven2 maven-jaxb2-plugin 0.8.2    generate    -no-header -Xxew -Xxew:instantiate lazy -Xxew:delete    com.github.jaxb-xew-plugin jaxb-xew-plugin 1.0       

如果您开始使用命名空间以便生成的类具有包名称,请不要使用-Xxew:delete标志,因为我最近修复了一个错误,即我删除了它不应该删除的对象。 或者,您可以从github获取代码并将其用作1.1-SNAPSHOT。

当我这样做时,我得到了我认为你正在寻找的代码:

 @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "Root", propOrder = { "items" }) public class Root { @XmlElementWrapper(name = "items", required = true) @XmlElement(name = "item") protected List items; public List getItems() { if (items == null) { items = new ArrayList(); } return items; } public void setItems(List items) { this.items = items; } }