解决包含的XSD中的命名冲突以进行JAXB编译

时间:2010-04-26 15:16:10

标签: java jaxb xjc

我目前正在尝试使用JAXB(IBM build 2.1.3)将一对模式文件编译到同一个包中。每个都会自己编译,但是当我们尝试将它们编译在一起时,由于包含了一个元素命名冲突。我的问题是;有没有办法用外部绑定指定命名冲突的解决方案。

示例文件如下。在示例中,违规元素称为“公共”,它在incA和incB中定义:

incA.xsd

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" 
    targetNamespace="http://www.example.org/"
    xmlns:tns="http://www.example.org/" elementFormDefault="qualified">
    <complexType name="TypeA">
        <sequence>
            <element name="ElementA" type="string"></element>
        </sequence>
    </complexType>
    <!-- Conflicting element -->
    <element name="Common" type="tns:TypeA"></element>
</schema>

incB.xsd

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" 
    targetNamespace="http://www.example.org/"
    xmlns:tns="http://www.example.org/" elementFormDefault="qualified">
    <complexType name="TypeB">
        <sequence>
            <element name="ElementB" type="int"></element>
        </sequence>
    </complexType>
    <!-- Conflicting element -->
    <element name="Common" type="tns:TypeB"></element>
</schema>

A.xsd

<?xml version="1.0" encoding="UTF-8"?>
<schema targetNamespace="http://www.example.org/"
    elementFormDefault="qualified" xmlns="http://www.w3.org/2001/XMLSchema"
    xmlns:tns="http://www.example.org/">
    <include schemaLocation="incA.xsd"></include>
    <complexType name="A">
        <sequence>
            <element ref="tns:Common"></element>
        </sequence>
    </complexType>
</schema>

B.xsd

<?xml version="1.0" encoding="UTF-8"?>
<schema targetNamespace="http://www.example.org/"
    elementFormDefault="qualified" xmlns="http://www.w3.org/2001/XMLSchema"
    xmlns:tns="http://www.example.org/">
    <include schemaLocation="incB.xsd"></include>
    <complexType name="B">
        <sequence>
            <element ref="tns:Common"></element>
        </sequence>
    </complexType>
</schema>

编译器错误,两者都是从xjb的一次调用中编译的:

[ERROR] 'Common' is already defined
 line 9 of file:/C:/temp/incB.xsd
[ERROR] (related to above error) the first definition appears here
 line 9 of file:/C:/temp/incA.xsd

(作为参考,这是解决编译OAGIS8 SP3包的问题的概括)

1 个答案:

答案 0 :(得分:2)

我已经确定了进一步的研究,由于名称 - 空间碰撞,试图一次编译所有这些片段是不可能的。我决定的工作是将每组模式子集编译到它们自己的包中,并在尝试解组之前对传入的XML执行启发式测试。