【问题标题】:Apache CXF -Enunciate wsdl generation ErrorApache CXF - 说明 wsdl 生成错误
【发布时间】:2010-06-26 01:33:30
【问题描述】:

我们正在使用 Apache CXF 代码优先方法来创建 Web 服务。我们有一个自定义的 soap 标头来传递用户凭据。

我正在尝试使用 @webparam 注释在 SEI 中传递用户凭据。

这是 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:\workspace\myService\src\main\java\com\ws\api\ItemPublicationWebService.java:52: [xml] Web 方法定义了一个名为“userDetails”的消息部分,它与 Web 的名称相同D:\workspace\myService\src\main\java\com\ws\api\ItemPublicationWebService.java:41 中定义的消息部分。请使用注释来消除歧义。

我发现保持 webParam 名称唯一会生成 wsdl。但这不是预期的结果。

我在这里错过了什么?

【问题讨论】:

    标签: java wsdl jax-ws cxf enunciate


    【解决方案1】:

    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

    现在,如果您不关心让 Enunciate 为您生成 WSDL,您可以禁用“xml”Enunciate 模块:

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

    【讨论】:

    • 谢谢瑞恩...我会试试这个
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多