【发布时间】:2012-01-12 16:05:20
【问题描述】:
我有一个大型第三方 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 中生成错误。任何帮助将不胜感激。
【问题讨论】:
-
如果您找到任何方法可以做到这一点,我对您的解决方案很感兴趣。