Java JAXB重复类重命名
嗨,我想知道是否有人能帮我。我有两个.xsd模式文件orderservice-order.xsd和order.xsd,每个文件都将元素类型命名为“order” order.xsd .xjb文件中的XPATH似乎没有问题。如果我将orderservice-order.xsd中的元素重命名为orderNew并将xpath更改为Java JAXB重复类重命名,java,maven,xsd,jaxb,Java,Maven,Xsd,Jaxb,嗨,我想知道是否有人能帮我。我有两个.xsd模式文件orderservice-order.xsd和order.xsd,每个文件都将元素类型命名为“order” order.xsd .xjb文件中的XPATH似乎没有问题。如果我将orderservice-order.xsd中的元素重命名为orderNew并将xpath更改为 node="//xs:element[@name='orderNew']/xs:complexType" 显然没有名称冲突,但该类已重命名为“OSOrder” 这就好像在
node="//xs:element[@name='orderNew']/xs:complexType"
显然没有名称冲突,但该类已重命名为“OSOrder”
这就好像在绑定文件重命名开始之前对模式文件进行了一些预验证。我尝试过关闭各种jaxb/maven设置,如严格验证等,但没有效果
有人见过这个,知道怎么解决吗???顺便说一下,我不控制模式文件的内容
多谢各位
我正在使用Java 7上运行的maven插件jaxb2 maven插件版本1.3和jaxb版本2.0
maven配置
org.codehaus.mojo
jaxb2 maven插件
1.3
陈述
XSD/v1.0/Representation
com.xxxxxxxxx.xml.representation.v1
XSD/v1.0/Representation
src/主/生成源
${project.build.directory}/generated sources/jaxb/.representation
假的
xjc
在JAXB绑定中,如果需要,可以为每个文件指定绑定,并根据需要为每个文件重命名类以解决冲突
下面是一个例子:
两个XSD中的目标名称空间相同。
因此,在同一名称空间中定义两次类型顺序
,这是不可能的。
如果您更改了目标名称空间,就不会再有问题了
例如,对于orderservice order.xsd
,我将目标命名空间更改为:
targetNamespace="http://xml.xxxxxxxx.com/orderservice-order"
我再也没有这个问题了。嗨,迈克尔,谢谢你的回复。不幸的是,我已经尝试过这个方法(请参阅我的jaxb绑定文件),问题似乎是模式文件在类重命名之前以某种方式进行了验证。我试过你给两个类命名的例子,但仍然遇到同样的问题。与你做的相比,我改变了一些事情。首先,我更改了XPATH模式,以便它标识所有名为“Order”的元素。其次,我添加了
implClass=“Order”
,因此实现类名被强制为我根据JAXB文档提供的名称()是的,我注意到了这一点,并尝试了您的示例,但仍然得到相同的验证错误。此外,我认为类映射到复杂类型,因此XPath应该是//xs:element[@name='order']/xs:complexType
,但这也不起作用。作为测试,我尝试删除一个.xsd文件以停止冲突,然后使用xpath重命名该类。我注意到xjc命令确实进行了一些验证,但即使使用-nv(无验证)参数也没有什么区别。也许这与maven插件有关??
<jxb:bindings schemaLocation="../XSD/v1.0/Representation/orderservice-order.xsd">
<jxb:bindings node="//xs:element[@name='order']/xs:complexType">
<jxb:class name="OSOrder" />
</jxb:bindings>
</jxb:bindings>
...XSD/v1.0/Representation/orderservice-order.xsd; lineNumber: 69; columnNumber: 15; 'order' is already defined
node="//xs:element[@name='orderNew']/xs:complexType"
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxb2-maven-plugin</artifactId>
<version>1.3</version>
<executions>
<execution>
<id>Representations</id>
<configuration>
<schemaDirectory>XSD/v1.0/Representation</schemaDirectory>
<packageName>com.xxxxxxxxx.xml.representation.v1</packageName>
<bindingDirectory>XSD/v1.0/Representation</bindingDirectory>
<outputDirectory>src/main/generated-sources</outputDirectory>
<staleFile>${project.build.directory}/generated-sources/jaxb/.representation</staleFile>
<clearOutputDir>false</clearOutputDir>
</configuration>
<goals>
<goal>xjc</goal>
</goals>
</execution>
<jxb:bindings schemaLocation="order.xsd">
<jxb:bindings node="//xs:element[@name='order']">
<jxb:class name="Order" implClass="Order"/>
</jxb:bindings>
</jxb:bindings>
<jxb:bindings schemaLocation="orderservice-order.xsd">
<jxb:bindings node="//xs:element[@name='order']">
<jxb:class name="OSOrder" implClass="OSOrder"/>
</jxb:bindings>
</jxb:bindings>
targetNamespace="http://xml.xxxxxxxx.com/order"
targetNamespace="http://xml.xxxxxxxx.com/orderservice-order"