如何使用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; } }