Java JAXB重复类重命名

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” 这就好像在

嗨,我想知道是否有人能帮我。我有两个.xsd模式文件orderservice-order.xsd和order.xsd,每个文件都将元素类型命名为“order”

order.xsd .xjb文件中的XPATH似乎没有问题。如果我将orderservice-order.xsd中的元素重命名为orderNew并将xpath更改为

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"