2010-10-29 65 views
1

我正在开发消耗现有SOAP Web服务的第二个客户端应用程序。 我使用最新版的Apache CXF 2.3工具Apache CXF WSDLToJava错误:操作已存在。如何绕过?

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

,并得到

WSDLToJava错误现有的WSDL生成Java:java.lang.IllegalArgumentException异常:有名称的操作[{瓮: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

http://www.apacheserver.net/the-Apache-CXF/ – 2010-10-29 08:49:13

回答

2

这是由WSI-Basic配置文件特别禁止的。如果你看一下:

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

第4.5.3节,它明确规定:

操作名称中的wsdl超载:端口类型本概要不允许。

我不认为CXF中存在解决方法,因为操作存储在QName上的Map上。由于QNames不是唯一的,只有一个操作可以存储在地图中。

+0

b)的方法是这样的,即跳过第二次错误发生并继续生成代码? – 2010-11-01 05:11:21

+0

在生成之前,您不能简单地从wsdl中删除操作元素吗? – awi 2010-11-30 15:07:56