3

コマンドラインから xjc を使用して、XSD から POJO を生成しています。私が実行するコマンドは次のとおりです。

"%java_home%\bin\xjc" -p com.etc.etc.etc.etc ConsolidatedAlert.xsd

生成された POJO の一部では、POJO のプロパティは次のように返されます。

@XmlElement(name = "UnparsedTelephone", namespace="")
protected String unparsedTelephone;

私が知る限り、これらの要素を「名前空間」属性を持たない他の要素と異なるように指定していません。

XSD の関連セクションは次のとおりです。

型宣言:

<xs:complexType name="TelephoneType">
    <xs:choice>
        <xs:element name="UnparsedTelephone" type="xs:string"/>
        <xs:element name="ParsedTelephone" type="ParsedTelephoneType"/>
    </xs:choice>
</xs:complexType>

要素宣言:

<xs:element name="Telephone" type="TelephoneType"/>

「電話」が使用される場所:

<xs:complexType name="CompanyContactType">
    <xs:sequence>
        <xs:element ref="Telephone"/>
    </xs:sequence>
</xs:complexType>

「CompanyContact」が使用される場所:

<xs:complexType name="AmountType">
        <xs:sequence>
            <xs:element ref="CompanyContact" minOccurs="0" />
            <xs:element name="TriggerAmount" type="xs:string"/>
        </xs:sequence>
</xs:complexType>

各 POJO から namespace="" を単純に削除できますが、それには少し時間がかかる可能性があり、そもそもなぜそれが起こっているのかをよりよく理解したいと思います。

また、これは約 8 つの XSD がすべてリンクされています。それらはすべてスキーマ定義で同じ targetNamespace と xmlns を持っていますが、それらのいくつかは elementFormDefault="unqualified" を持ち、他のものは elementFormDefault="qualified" を持っています。これが問題の原因でしょうか?

何か案は?

4

1 に答える 1

3

名前空間修飾と XML スキーマ

このelementFormDefault="qualified"XML スキーマに対応するすべての要素が名前空間で修飾される場合。elementFormDefault="unqualified"グローバル (最上位) 要素のみが名前空間で修飾される場合。

名前空間修飾と JAXB

JAXB を使用すると、名前空間修飾をパッケージ レベルで設定できます@XmlSchema。複数のスキーマと非公開の数の生成されたパッケージがある""ため、名前空間用に生成された XJC がスキーマ ルールに一致するようにデフォルトの修飾をオーバーライドする可能性が非常に高くなります。

于 2013-10-29T21:19:03.197 に答える