2010-10-29 26 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