複合型を受け入れる操作を定義するWSDLがあるとしましょう。これは、次のような非常に一般的なWebメソッドのものです。
<xs:element name="createBill">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="customer" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="billId" nillable="true" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<wsdl:message name="createBillRequest">
<wsdl:part name="parameters" element="ns:createBill" />
</wsdl:message>
<wsdl:operation name="creatBill">
<wsdl:input wsaw:Action="urn:createBill" message="axis2:createBillRequest" />
...
</wsdl:operation>
2つの異なる呼び出しのWebServices標準実装ルールは何ですか。1つはbillIdを指定し、もう1つxsi:nil
はノードを完全に省略しますか?
<creatBill ...>
<customer>1332400</customer>
<billId xsi:nil="true"/>
</createBill>
vs
<creatBill ...>
<customer>1332400</customer>
</createBill>
より多くの背景を明らかにするために、私は1人のJavaの人に問題があります。彼のWebサービスはAxis2で行われ、(私には奇妙な理由で)bill要素の省略をnil値とは異なる方法で処理します。私の主張は、それらは同一であり、どちらの場合も同じように動作する必要があるということです(たとえば、動的なbillIDを作成します)。彼の主張は、それは同じではなく、ノードが欠落している場合にのみ動的IDを生成し、そうでない場合はノードがnillされたときにエラー(「billId欠落」)を返すというものです。
彼の主張で私が抱えている実際的な問題は、.NETのWCFスタックとWSスタックの両方がこれらを同じものとして扱い、nillableパラメーターを省略するためのプロビジョニングさえ行わないため、自分の書き込みなしでクライアントを実装することは事実上不可能です。独自のWSスタックと、彼が実装するWS-Security。現状では、nullを指定してサービスを呼び出すことしかできません。
serv.createBill("1332400", null);
serv.createBill("1332400"); // ERROR: no such method
彼がJavaでサーバー側を実装して、1つのWebメソッドが異なる呼び出しパターンを持つようにした方法さえわかりません。ノードが省略されたときにAxis2によって設定されるbillIDパラメーターは何ですか?彼は非常に非協力的であり、彼らがサポート契約を結んでいるので、彼に、そして後で彼のマネージャーに提示するためにいくつかの議論が必要です(もしあれば)。
私たち両方が正しいわけではないので、WS標準がここで何を規定しているのか誰かが知っていますか?誰が基準に責任がありますか?私はwcfvsaxis Flameを開始していません(ご遠慮ください)。両方の親として、SOAP/WSDL標準と仕様の観点からこの問題を検討する必要があります。