JAXB:在 XSD 中指定 attr 类型时如何更改 XJC 生成的类名称?
我是 JAXB 的初学者,在使用 xjc 生成 Java 类时遇到了烦人的问题。我提供了这样的 XSD:
<xs:element name="item" type="itemType"/>
...
<xs:complexType name="itemType">
<xs:attribute name="id" type="xs:string" use="required">
...
</xs:complexType>
并且 xjc 正在生成一个名为 ItemType.java
的类,但我希望名称为 Item.java
。也就是说,我希望生成的类就像 XSD 一样:
<xs:element name="item">
<xs:complexType>
<xs:attribute name="id" type="xs:string" use="required">
...
</xs:complexType>
</xs:element>
在任何其他元素上不会重用 itemType,只是构造 XSD 的人喜欢这种方式。 我想可能有一种方法可以使用自定义绑定来做到这一点,但我仍然没有找到方法。
有什么帮助吗?
谢谢, 米格尔
I'm a beginner to JAXB and I'm having annoying issues when generating Java classes with xjc. I am provided with a XSD like this:
<xs:element name="item" type="itemType"/>
...
<xs:complexType name="itemType">
<xs:attribute name="id" type="xs:string" use="required">
...
</xs:complexType>
and xjc is generating a class called ItemType.java
, but I want the name to be Item.java
. That is, I want the generated classes as if the XSD was like this:
<xs:element name="item">
<xs:complexType>
<xs:attribute name="id" type="xs:string" use="required">
...
</xs:complexType>
</xs:element>
There won't be any reuse of itemType on any other element, it's just the people that constructs the XSD likes it this way.
I guess there may be a way to do it with custom bindings but I still haven't found how.
Any help?
Thanks,
Miguel
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
JAXB 提供了两种方法来实现此目的:
1.内联模式注释
您可以使用 JAXB 模式注释来控制类名称。
2.外部绑定文件
此自定义也可以通过外部绑定文件完成:
xjc 命令行为:
JAXB provides two ways to accomplish this:
1. Inline Schema Anntotations
You can use JAXB schema annotations to control the class names.
2. External Binding File
This customization can also be done via and external binding file:
The xjc command line would be:
好吧,我终于找到了该怎么做。我的外部绑定文件是:
并且
xjc
命令必须使用-extension
选项执行。我在此页面中找到了解决方案:
http://weblogs。 java.net/blog/kohsuke/archive/2006/03/why_does_jaxb_p.html(编辑:过时的链接)
https://community.oracle.com/blogs/kohsuke/2006/03/ 03/why-does-jaxb-put-xmlrootelement-sometimes-not-always(新链接)
问候,
米格尔
Well, I finally found how to do it. My external binding file is:
and
xjc
command must be executed with-extension
option.I found the solution in this page:
http://weblogs.java.net/blog/kohsuke/archive/2006/03/why_does_jaxb_p.html (EDIT: obsolete link)
https://community.oracle.com/blogs/kohsuke/2006/03/03/why-does-jaxb-put-xmlrootelement-sometimes-not-always (new link)
Regards,
Miguel
这是我用来重命名复杂类型的外部绑定文件。使用 cxf 的 wsdl2java 进行编译。
This is the external binding file I use to rename a complextype. Compiles with cxf's wsdl2java.