2

jaxb 2.2.6 の xjc を使用して、xsd ファイルから一連のクラスを生成しました。「package-info.java」を編集することで、さまざまな名前空間にプレフィックス値を関連付けました。そのため、xml ファイルをアンマーシャリングし、いくつかの情報を編集し、オブジェクトを xml 形式でマーシャリングするメインのテスト クラスを作成しました。すべてがチャームのように機能し、javax.xml.bind.Marshaller オブジェクトは、package-info で定義されている名前空間とプレフィックスに正しく一致します。

同じマシンの tomcat7 で axis2 を使用してこのアプリケーションを WS としてデプロイし、上記の javax.xml.bind.Marshaller コードを実行する ws メソッドを呼び出すと、デフォルトの名前空間 (ns1、ns2....) で xml ファイルが作成されます。

私が使用した package-info.java は次のようなものです。

@javax.xml.bind.annotation.XmlSchema(
        namespace = "....", 
        xmlns = {   
                @XmlNs(namespaceURI = "....", prefix = "myprefix"),
                @XmlNs(namespaceURI = "...", prefix = "myprefix2"),
            },
        elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
package ....;

import javax.xml.bind.annotation.XmlNs; 

これは正しい出力の一部です (この出力は、コードを「Java アプリケーション」として実行したときに得られます)。

.....
    <ContactInformation>
        <rm:ContactDescription>ASD</rm:ContactDescription>
        <rm:ContactRole>ASD</rm:ContactRole>
        <rm:ContactLocation/>
        <rm:AdditionalContactInformation>
            <xnl:PartyName>
                <xnl:PersonName>
                    <xnl:NameElement xnl:ElementType="FirstName">ASD</xnl:NameElement>
                    <xnl:NameElement xnl:ElementType="LastName">ASD</xnl:NameElement>
                </xnl:PersonName>
                <xnl:OrganisationName>
                    <xnl:NameElement>ASD</xnl:NameElement>
                </xnl:OrganisationName>
            </xnl:PartyName>
        </rm:AdditionalContactInformation>
    </ContactInformation>
......

これは間違った出力です (この出力は、「Axis2/Tomcat7 WS アプリケーション」内でコードを実行すると得られます)。

.....
  <ContactInformation>
        <ns2:ContactDescription>ASD</ns2:ContactDescription>
        <ns2:ContactRole>ASD</ns2:ContactRole>
        <ns2:ContactLocation/>
        <ns2:AdditionalContactInformation>
            <ns7:PartyName>
                <ns7:PersonName>
                    <ns7:NameElement ns7:ElementType="FirstName">ASD</ns7:NameElement>
                    <ns7:NameElement ns7:ElementType="LastName">ASD</ns7:NameElement>
                </ns7:PersonName>
                <ns7:OrganisationName>
                    <ns7:NameElement>ASD</ns7:NameElement>
                </ns7:OrganisationName>
            </ns7:PartyName>
        </ns2:AdditionalContactInformation>
    </ContactInformation>
......

ケースごとに、名前空間の変換が宣言されている package-info.java が存在します。

この問題を解決するにはどうすればよいですか?

4

1 に答える 1