我正在开发使用现有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没有帮助。
答案 0 :(得分:2)
WSI-Basic Profile特别禁止这一点。如果你看看:
http://www.ws-i.org/profiles/basicprofile-1.1.html
第4.5.3节,具体说明:
配置文件不允许wsdl:portType中的操作名称重载。
我认为在CXF中没有办法绕过它,因为操作存储在以QName键入的Map中。由于QNames不是唯一的,因此只能在地图中存储一个操作。