2

現在、JAXB(IBMビルド2.1.3)を使用して1組のスキーマファイルを同じパッケージにコンパイルしようとしています。それぞれが独自にコンパイルされますが、それらを一緒にコンパイルしようとすると、インクルードが原因で要素の名前が競合します。私の質問は; 名前の衝突に対する解決策を外部バインディングで指定する方法はありますか。

サンプルファイルは次のとおりです。この例では、問題のある要素は「共通」と呼ばれ、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の1つの呼び出しからコンパイルされる場合のコンパイラエラー:

[エラー]「共通」はすでに定義されています
 ファイルの9行目:/C:/temp/incB.xsd
[エラー](上記のエラーに関連)最初の定義がここに表示されます
 ファイルの9行目:/C:/temp/incA.xsd

(参考までに、これはOAGIS8 SP3パッケージのコンパイルに関する問題を解決するための一般化です)

4

1 に答える 1

2

名前空間の衝突のため、これらすべてのフラグメントを一度にコンパイルしようとすることは不可能であると、さらなる調査で判断しました。私が決めた回避策は、スキーマサブセットの各セットを独自のパッケージにコンパイルし、着信XMLをアンマーシャリングする前に、ヒューリスティックテストを実行することでした。

于 2010-05-05T16:19:17.657 に答える