【问题标题】:WSDL is changed after publishing发布后更改 WSDL
【发布时间】:2012-09-05 14:39:01
【问题描述】:

当我发布从 WSDL 创建的 Web 服务时,发布后创建的 WSDL 与原始的不同。不同之处在于发布后创建的 WSDL/XSD 有附加元素(ARG0),它包含所有根元素。

由于上述原因,我无法将原始 WSDL/XSD 共享给客户端开发人员,因为原始 WSDL 和发布后创建的不一样。

我使用 Java 作为编程语言和 JAX-WS。

使用 API javax.xml.ws.Endpoint 发布 Web 服务,无需任何应用程序服务器。

Endpoint.publish(url,webserviceinstance)

提前致谢。

【问题讨论】:

    标签: java xsd jaxb wsdl


    【解决方案1】:

    由于问题是不必要的包装问题,我专注于包装注释。最终我发现这个问题有一个相关的注释。在 Class 开头添加以下注释语句后,问题已解决。

    @SOAPBinding(parameterStyle=SOAPBinding.ParameterStyle.BARE)
    public class WebServiceHandler implements WebService {
    //....
    }
    

    从现在开始,我可以从原始 WSDL 创建成功的请求到部署的机器。

    【讨论】:

      【解决方案2】:

      如果您发布 wsdl,则可以做出更好的评估。鉴于您看到了一个意想不到的包装器,我的猜测是 jax-ws 对原始 wsdl 的解释与您的预期不同。这里的页面 (http://www.ibm.com/developerworks/webservices/library/ws-whichwsdl/) 讨论了不同的 wsdl 配置。我的建议是您遵循使用文档/文字/包装约定的说明,因为它或多或少是基于肥皂的服务的主流。

      生成的已发布 wsdl 在服务名称、端口名称或命名空间方面仍可能略有不同,除非您使用 @Webservice 注释属性将它们强制为特定值,但它们将保持一致,以便您可以提供向您的客户发布 wsdl 并期待成功。

      【讨论】:

      • 为什么当我将 web 服务部署到应用程序服务器时 wsdl 没有更改?表示wsdl描述应该没有错,应该是javax.xml.ws.Endpoint API。
      • 如果没有生成的 wsdl,我只是在推测,但听起来 jax-ws 正在强制执行您不期望的约定。代码生成工具 (wsimport) 和 jax-ws 基于 wsdl 构造做出一些决定。 ibm.com 链接的页面中解释了不同的 wsdl 样式。
      • wsimport 工具在从 wsdl 创建代码时不会更改约定。我虽然 EndPoint 类在包装请求和响应参数方面做出了一些决定。
      【解决方案3】:

      此类问题的最常见原因是实现 Web 服务的类没有具有正确 endpointInterface 属性的 @WebService 注释。事实上,仅仅实现从 WSDL 生成的端点接口是不够的。

      【讨论】:

        猜你喜欢
        • 2017-02-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多