JAXB问题:nameXmlTransform typeName前缀不起作用
我希望将几个模式转换为Java代码。 模式都很相似; 例如,每个人都有一个TXLife根对象。 如果每个模式生成具有唯一类名的代码,则管理代码会更容易。 我可以使用“package”绑定将每个模式的代码放入自己的包中,但是当我尝试使用“prefix”绑定来更改类名时,它会忽略它。
这是我的schema_bindings.xml文件:
当我运行xjc命令时,我得到了(我必须修改xjc.bat文件中的类路径才能使其工作):
C:\ test> \ progs \ Java \ jaxb-ri-2.2.7 \ bin \ xjc.bat -extension -d src -b schema_bindings.xml schemas
解析模式...... 编译模式...... COM \ myCompany的\喜\ Holding.java COM \ myCompany的\喜\ InquiryLevel.java COM \ myCompany的\喜\ KeyedValue.java COM \ myCompany的\喜\ OLifE.java COM \ myCompany的\喜\ ObjectFactory.java COM \ myCompany的\喜\ Policy.java COM \ myCompany的\喜\ TXLife.java COM \ myCompany的\喜\ TXLifeRequest.java COM \ myCompany的\喜\ TransMode.java COM \ myCompany的\喜\ TransSubType.java COM \ myCompany的\喜\ TransType.java
我希望的是每个java文件(以及里面的类)都会被命名为“Hi_ ”。 Jaxb似乎完全忽略了我的“前缀”规范。 我在绑定文件上尝试了几种变体。 我也尝试使用Ant xjc任务进行相同的绑定,所有结果都相同。
我可以使用这些结果,但这意味着处理来自一个模式的输入并将输出生成到另一个模式的代码必须使用完全限定的类名来引用对象,这很尴尬。
TL; DR
对应于从命名复杂类型生成的类。 您可以通过添加
来执行以下操作,以影响从全局元素生成的类:
完整的例子
以下是一个完整的例子。
schema.xsd
下面的模式有一个全局元素和一个命名的复杂类型。
binding.xml
XJC电话
xjc -b binding.xml schema.xsd
产量
我们看到对应于全局元素的类以Element_
为前缀,而对应于指定复杂类型的类以Type
为前缀。 ObjectFactory
和package-info
不是域模型的一部分,JAXB利用它来获取元数据,因此它们的名称不受影响。
parsing a schema... compiling a schema... com/mycompany/hi/Element_GlobalElement.java com/mycompany/hi/ObjectFactory.java com/mycompany/hi/Type_NamedComplexType.java com/mycompany/hi/package-info.java