我们有两个元素名称相同但命名空间不同的 XML 模式。当我使用 xjc 时,编译器将元素分配给相同的类路径和元素。如下所示,根本问题在于对带前导数字的 XML Schema 命名空间的处理;特别是 1.0 和 1.1。XJC 正在将这些不同的 URI 编译到相同的类路径中;特别是_1。这导致与相同的类路径发生冲突:
com.companyabc.namespaces.eda.process._1.TheChangeType
bindings.xjb 中将 1.0 绑定到 _1_0 和 1.1 到 _1_1 的语法是什么?
谢谢!!!
XML 模式 1: http: //namespaces.companyABC.com/EDA/Process/1.0/TheChange
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:p10="http://namespaces.companyABC.com/EDA/Process/1.0"
targetNamespace="http://namespaces.companyABC.com/EDA/Process/1.0"
elementFormDefault="qualified">
<xs:element name="TheChange" type="p10:TheChangeType" />
<xs:complexType name="TheChangeType">
<xs:sequence>
<xs:element name="Field1" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:schema>
XML 模式 2: http: //namespaces.companyABC.com/EDA/Process/1.1/TheChange
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:p11="http://namespaces.companyABC.com/EDA/Process/1.1"
targetNamespace="http://namespaces.companyABC.com/EDA/Process/1.1"
elementFormDefault="qualified">
<xs:element name="TheChange" type="p11:TheChangeType" />
<xs:complexType name="TheChangeType">
<xs:sequence>
<xs:element name="Field1" type="xs:string" />
<xs:element name="Field2" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:schema>
错误:
[ant:xjc] [ERROR] A class/interface with the same name "com.companyabc.namespaces.eda.process._1.TheChangeType" is already in use. Use a class customization to resolve this conflict.
[ant:xjc] line 3 of file:/D:/source/1.0/TheChange.xsd
这是使用 XSD 模式注释的解决方案。然而,解决方案应该作为 bindings.xjb 中的绑定模式而不是注解来实现。注释将要求对每个模式进行注释,这是一个问题。
<xsd:annotation>
<xsd:appinfo>
<jaxb:schemaBindings>
<jaxb:package name="com.companyabc.namespaces.eda.process._1_0" />
</jaxb:schemaBindings>
</xsd:appinfo>
</xsd:annotation>
<jaxb:package name="com.companyabc.namespaces.eda.process._1_1" />
这个注解是如何作为 bindings.xjb 中的绑定模式实现的?