2010-06-26 60 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