我有一个大的第三方xsd文件,通过导入拉入一大堆其他xsd文件.整个事情产生超过1000个类.当我告诉xjc(jaxb)处理器生成特定包中的所有内容时,我会遇到各种命名冲突.如果我没有指定包,那么处理器使用xsd文件中的目标属性创建
java包,并且整个生成没有任何错误.
问题是包结构很糟糕,因为目标名称的选择非常糟糕.其他开发者讨厌它.他们只需要一些课程.
所以我一直在尝试做的是给处理器一个bindings.xml文件,我想在那里指定要在给定包名中生成的某些类.
我在Oracle网站,论坛,样本的文档之间来回走动.我不能引用我的绑定文件的每一次迭代.我目前的化身是这样的:
<jaxb:bindings
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
version="2.1"
schemaLocation="heavy.xsd"
node="//xsd:element[@name='Error']"
>
<jaxb:bindings node="//xsd:element[@name='Error']">
<jaxb:package name="ABC"/>
</jaxb:bindings>
<jaxb:globalBindings
underscoreBinding="asCharInWord"
localScoping="toplevel"
typesafeEnumMaxMembers="10000"
generateElementClass="true"
>
</jaxb:globalBindings>
<!--
<jaxb:package name="ABC"/>
-->
<!--
<jaxb:schemaBindings>
<jaxb:package name="ABC"/>
</jaxb:schemaBindings>
-->
<!--
<jaxb:schemaBindings>
<jaxb:package name="ABC"/>
<jaxb:nameXmlTransform>
<jaxb:elementName prefix="Error"/>
</jaxb:nameXmlTransform>
</jaxb:schemaBindings>
-->
</jaxb:bindings>
无论我尝试什么,我还没有看到它在ABC包中生成任何类.在这种情况下,我希望在ABC中生成错误.任何帮助将不胜感激.
最佳答案 不幸的是,你不可能做你想做的事.我想要同样的事情,我在同一条船上.但直接来自Oracles口:
http://docs.oracle.com/cd/E19316-01/819-3669/bnbbt/index.html
相关信息:
name – is the name of the derived Java interface. It must be a legal Java interface name and must not contain a package prefix. The package prefix is inherited from the current value of package.
因此,元素根本没有办法指定每个xsd继承的不同包.