Apache CXF WSDLToJava错误:操作已存在。如何绕过?

时间:2010-10-29 06:08:11

标签: wsdl cxf wsdl2java

我正在开发使用现有SOAP Web服务的第二个客户端应用程序。 我使用最新的Apache CXF 2.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脚手架? 在CXF WSDL to Java tool web page没有提到这个,除了-autoNameResolution没有帮助。

1 个答案:

答案 0 :(得分:2)

WSI-Basic Profile特别禁止这一点。如果你看看:

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

第4.5.3节,具体说明:

配置文件不允许wsdl:portType中的操作名称重载。

我认为在CXF中没有办法绕过它,因为操作存储在以QName键入的Map中。由于QNames不是唯一的,因此只能在地图中存储一个操作。