4

JAX-WS と wsimport を使用して、特定の Web サービスを使用する Java アプリケーションを作成しようとしています。サービスに送信される SOAP メッセージは、ほとんど正しいものです。ただし、サービス関数に渡されるパラメーターの 1 つは文字列の配列です。配列自体には SOAP XML で適切な名前空間が与えられていますが、要素 (以下のメッセージの「parm」) には名前空間がありません。これにより、サービスが失敗します。

<?xml version="1.0" ?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
    <S:Body>
        <ns2:Submit xmlns:ns2="http://www.acme.com/service/wsdl">
            <ns2:service>SomeJob</ns2:service>
            <ns2:parms>
                <parm>someparam</parm>
                <parm>anotherparam</parm>
            </ns2:parms>
        </ns2:Submit>
    </S:Body>
</S:Envelope>

<parm>要素は を読んでいる必要があります。<ns2:parm>または、代わりに、<Submit>タグでデフォルトの名前空間を定義することもできます<Submit xmlns="http://www.acme.com/service/wsdl">(これは、SOAP メッセージの例でサービスが示唆しているものです)。

この質問は JAX-WS の質問に似ています: なぜネストされた要素は "" 名前空間にあるのですか? . ただし、スタイルを RPC/Literal から Document/Wrapped に変更すると問題は解決しましたが、私の場合、サービスは最初は Document/Wrapped です。

配列内のネストされた要素に名前空間を生成するように JAX-WS ライブラリを説得するにはどうすればよいですか?

TIA、ジェロン

更新: 生成されたコードの編集は機能しているようです。誰かが、生成された配列型の「parm」の定義に先行する @XmlElement 行に名前空間属性を追加することを提案しました。

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "ArrayOfString", propOrder = {
    "parm"
})
public class ArrayOfString {

@XmlElement(nillable = true, namespace="http://www.acme.com/service/wsdl")
protected List<String> parm;
...
}

これにより、JAX-WS が名前空間を追加し、おそらく問題が解決します。この場合、コード生成は 1 回だけ実行されるため、生成されたコードの編集は許容されます。それでも、より良い解決策がないかどうか疑問に思います。

4

1 に答える 1

0

追加することで名前空間の作成に影響を与えることもできます

elementFormDefault="qualified"

あなたのJava@XmlSchemaアノテーションに、またはあなたの場合には、サービスを定義するXSDに。

于 2013-03-26T12:54:21.643 に答える