1

既存のSOAPWebサービスを使用する2番目のクライアントアプリケーションを開発しています。最新のApacheCXF2.3ツールを使用して既存のWSDLからJavaを生成します

wsdl2java -client -ant http://172.20.0.22/someletters/TradingServer.asmx?WSDL

取得します

WSDLToJavaエラー:java.lang.IllegalArgumentException:[{urn:someschema:TradingServer}GetTradeSummary]という名前の操作がこのサービスにすでに存在します

これにはロジックがあります。WSDLファイルを見ると、2つの同様の操作GetTradeSummaryが表示されますが、soapActionが異なります。

<wsdl:operation name="GetTradeSummary">
  <soap:operation soapAction="urn:someschema/GetTradeSummary" style="document" />
  <wsdl:input>
    <soap:body use="literal" />
  </wsdl:input>
  <wsdl:output>
    <soap:body use="literal" />
  </wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetTradeSummary">
  <soap:operation soapAction="urn:someschema/GetTradeSummary_Open" style="document" />
  <wsdl:input name="GetTradeSummary_Open">
    <soap:body use="literal" />
  </wsdl:input>
  <wsdl:output name="GetTradeSummary_Open">
    <soap:body use="literal" />
  </wsdl:output>
</wsdl:operation>

a)ある基準では、それは本当に誤りであると見なされていますか?どれ?

b)これをバイパスして、残りのJavaスキャフォールディングを生成する方法はありますか?役に立たない-autoNameResolutionを除いて、 CXF WSDLtoJavaツールのWebページにはそのような言及はありません。

4

1 に答える 1

2

これは、WSI-Basicプロファイルでは特に許可されていません。あなたが見れば:

http://www.ws-i.org/profiles/basicprofile-1.1.html

セクション4.5.3には、具体的に次のように記載されています。

wsdl:portTypeでの操作名のオーバーロードは、プロファイルによって許可されていません。

操作はQNameにキー設定されたマップに格納されるため、CXFでそれを回避する方法はないと思います。QNameは一意ではないため、マップに保存できる操作は1つだけです。

于 2010-10-29T14:34:39.943 に答える