1

私はWebサービスが初めてです。テスト用にいくつかの単純な Web サービスを作成していますが、次の質問があります。

ここの Web サイトには、JAX-RPC がプリミティブ型の配列をサポートしていると書かれています。しかし、単純なWebサービスを書くとき

@WebService
@SOAPBinding(style=Style.RPC)
public interface AddNums {
    @WebMethod
    public int addNumbers(int[] nums);

}

wsdl からクライアント コードを生成すると、次の WS クライアント インターフェイスが得られます。

@WebMethod
@WebResult(partName = "return")
public int addNumbers(
    @WebParam(name = "arg0", partName = "arg0")
    IntArray arg0); 

メンバーが保護されたリストを持つ IntArray クラスを生成します

public class IntArray {

    @XmlElement(nillable = true)
    protected List<Integer> item;

これがアレイのサポート方法ですか? では、配列を渡す唯一の方法は、IntArrayのインスタンスを作成し、 List of Integersをそれに設定することですか?

また、Webサービスをドキュメントスタイルにするとき

WSDL からの WS クライアント インターフェイスには、次のメソッドがあります。

public int addNumbers(
    @WebParam(name = "arg0", targetNamespace = "")
    List<Integer> arg0);

元のサービスのint[ ]配列はList< Integer>になりました

これは、wsdl から生成されたクライアント コードでは、Web サービスの Array 型が常に List に変換されるということですか?

4

1 に答える 1

3

JAX-WS はバインディングに JAXB を使用します。のデフォルトのマッピングは<sequence>ですList。ただし、@XmlJavaTypeAdapter注釈を使用して、XML コンテンツのカスタムマッピングを提供できます。

JAXB の詳細については、JAXB の紹介 (Java チュートリアル > XML バインディングのための Java アーキテクチャ (JAXB))を参照してください。

別の方法として、配列を返すこともできます。I can't return array String[] with JAX-WSという質問の回答を参照してください。しかし、検討する必要があるかもしれません: この質問を見てください: JAX-WS @WebMethod から配列を返すことはできますか? .

于 2013-01-13T22:17:47.453 に答える