私は WSDL と JAX-WS を掘り下げていましたが、そこでこれに出会いました。次のようにJAX-WSでサービスインターフェースを書くと:
@WebService
@SOAPBinding(style = Style.RPC)
public interface HelloWorld {
@WebMethod
@WebResult(name="helloworldstring")
String getHelloWorldAsString(**@WebParam(name="myname")** String name);
}
生成された WSDL ではmessage
、for request が次のように宣言されています。
<message name="getHelloWorldAsString">
<part **name="myname"** type="xsd:string"></part>
</message>
ユーティリティからクライアント スタブを生成するwsimport
と、生成されたサービス クラスは両方ともname
" partName
myname" として取得されます。
サービスでまったく指定しない場合@WebParam
、WSDL は一部の名前を取得しますが、arg0
使用して生成されたサービス スタブは宣言のとのwsimport
両方を取得します。name
partName
arg0
@webParam
次のようにサービス クラスでname
との両方を指定するとpartName
、次のようになります。@WebParam
@WebService
@SOAPBinding(style = Style.RPC)
public interface HelloWorld {
@WebMethod
@WebResult(name="helloworldstring")
String getHelloWorldAsString(**@WebParam(name="myname", partName="mypartname")** String name);
}
生成された WSDL は、パーツ名を として取得しmypartname
ます。wsimport
また、 getsとof のmypartname
両方の宣言を使用して生成されたサービス スタブも、Web サービスで宣言されたものを完全に無視します。name
partName
@WebParam
name="myname"
したがって、 のこれら 2 つのプロパティの重要性がわかりません@WebParam
。この 2 つのプロパティに異なる値を指定すると、WSDL に反映されるはずです。
このリンクでは、次のように説明されています。
name
: 生成された WSDL ドキュメントに表示されるパラメータの名前を指定します。RPC バインディングの場合、これはパラメーターを表す wsdl:part の名前です。ドキュメント バインディングの場合、これはパラメータを表す XML 要素のローカル名です。JAX-WS 仕様によると、デフォルトは argN で、N はゼロベースの引数インデックス (つまり、arg0、arg1 など) に置き換えられます。partName
: パラメータの wsdl:part 要素の name 属性の値を指定します。このプロパティは、ドキュメント スタイルの SOAP バインディングに使用されます。
しかし、まだそこから多くの理解が得られていません。differentname
とを指定すると、どのような違いが生じるか知りたいと思いますpartName
。
注: これはすべて、Document スタイルではなく RPC スタイルの SOAP バインディングで行っています。