2010-06-26 62 views
1

我們使用Apache CXF代碼優先的方式來創建web服務。我們有一個自定義肥皂頭來傳遞用戶憑據。Apache CXF - 發出wsdl代錯誤

我想在SEI中使用@webparam註釋傳遞usercredentials。

這些是Service類中的兩個操作。

@Path("/item/{id}") 
@GET 
public Item getItem(@PathParam("id") String id, 
@WebParam(name="userDetails", header=true, mode=Mode.IN) UserDetails details) throws NotFoundException; 

@Path("/name/{id}") 
@GET 
public Item getItemByName(@PathParam("id") String id, 
@WebParam(name="userDetails", header=true, mode=Mode.IN) UserDetails details) throws NotFoundException; 

闡明而產生的wsdl引發錯誤說

d:\工作空間\爲myService \ SRC \主\的java \ COM \ WS \ API \ ItemPublicationWebService.java:52:[XML] Web方法定義了一個名爲'userDetails'的消息部分,該消息部分與在D:\ workspace \ myService \ src \ main \ java \ com \ ws \ api \ ItemPublicationWebService.java中定義的Web消息部分的名稱相同:41。請使用註釋來消除歧義。

我發現保持唯一的webParam名稱將生成wsdl。但那不是預期的結果。

我在這裏錯過了什麼?

回答

0

Enunciate在這裏做的是試圖爲您的Web服務API構建一個漂亮,乾淨,整合的WSDL。 Enunciate與其他WSDL生成器不同,因爲它在編譯時起作用,並嘗試將所有頭元素分組到一個WSDL可引用的統一的XML模式文件中。 (其他WSDL生成器在運行時工作,因此可以根據需要即時生成模式,但XML元素有很多重複等)

因此,當Enunciate遇到您的「getItem」方法時,它看到名爲「userDetails」的頭元素,並將該XML元素添加到正在生成的XML模式文檔中。然後,Enunciate遇到你的「getItemByName」方法,並且看到還有另一個名爲「userDetails」的頭元素,它不夠聰明,看不到它們是相同的元素。所以認爲存在衝突,會引發錯誤。

我記錄一個JIRA問題給你:

http://jira.codehaus.org/browse/ENUNCIATE-453

現在,如果你不關心有字正腔圓生成您的WSDL適合你,你可以禁用「XML」字正腔圓模塊:

<enunciate...> 
    ... 
    <modules> 
    <xml disabled="true"/> 
    </modules> 
</enunciate> 
+0

該問題現已解決。 – 2010-10-22 22:03:21

+0

謝謝瑞恩......我會試試這個 – vijay 2010-11-01 03:57:05