【问题标题】:What is the difference between ?wsdl and ?singleWsdl parameters?wsdl 和 ?singleWsdl 参数有什么区别
【发布时间】:2014-10-06 07:17:21
【问题描述】:

我的消息传递提供程序为我提供了两种不同类型的 WSDL 供我使用。

http://my.amazonaws.com:8000/webservice/?wsdl
http://my.amazonaws.com:8000/webservice/?singleWsdl

第一个是嵌入式 WSDL。不能用它来生成WSDL2java 包和 不能使用 JAX-WS 创建连接。

第二个是单个 WSDL。它可以使用 CXF 3.0 的 WSDL2java 生成 Java 包,并且可以使用 JAX-WS 创建连接。效果很好。

请告诉我这两种 WSDL 有什么区别。

【问题讨论】:

    标签: web-services wsdl cxf jax-ws axis2


    【解决方案1】:

    在不知道这些链接返回什么的情况下,我们只能猜测,但这里有一些可能对您有所帮助的细节......

    使用?wsdl 为Web 服务端点添加后缀会为您提供一个WSDL 文件。 WSDL 可以由框架在运行时根据 Web 服务框架代码生成,也可以是服务器在指定 URL 参数时直接发回的实际物理文件。

    WSDL 包含一个 XML 模式,可以在 WSDL 本身内部指定,也可以作为由 WSDL 导入的单独文件指定。而现在问题出现了……

    一些 Web 服务存根生成器只能处理完整的 WSDL,其中包含 Schema。如果 WSDL 导入其他文件,则工具无法解析导入并失败。这使得 Web 服务难以使用,因为客户端在创建存根以与 Web 服务交互时遇到问题。以至于服务提供商要么使用实际的 WSDL 来响应 ?wsdl 请求,要么开始编写各种 hack 和插件以使 Web 服务生成完整的 WSDL。

    但有些供应商甚至懒得理会,因此客户必须编写破解程序来解析 WSDL,或者他们必须下载所有文件,手动将它们组合成一个文件,然后改用它。

    随着时间的推移,人们认识到这是一个问题,并且框架适应了提供完整的 WSDL,而不是带有导入的框架。但这又产生了另一个问题。更改?wsdl URL 返回的内容可能会破坏围绕它创建的所有黑客以解决导入问题。出于这个原因,选择了另一个约定来返回完整的 WSDL:?singleWsdl

    所以有些框架可以生成完整的 WSDL,有些使用导入生成它,有些允许您指定实际的物理文件,有些支持 ?singleWsdl 约定,有些不支持。与这个问题无关,但只是为了完成,还有一个?wsdl2 约定为您提供 WSDL 2.0 定义(?wsdl 为您提供 WSDL 1.1)。有些框架支持?wsdl2,有些不支持。

    我的猜测是您遇到的问题是由 Schema 导入引起的,但如果没有 WSDL 本身,我无法判断。希望至少这些细节能帮助您更好地识别问题。

    【讨论】:

    • 感谢博格丹的回答!
    • 我错了还是应该根据这个答案假设 ?singleWsdl 是首选?
    • @Veverke:当服务和客户端使用相同的技术堆栈时,大部分时间都没有关系(例如,svcutil 可以为 WCF 服务处理任何形式的 WSDL 内容)。当跨技术使用时,?singleWsdl 选项是最安全的(假设服务支持它)
    • @Bogdan:伙计,您绝对不需要知道这些 URL 必须回答这个查询。这对我来说也是同样的问题,当我们的一位客户使用时,singlewsdl 有效,而 wsdl 不适用于我的 WCF 服务。您的回答虽然被接受,但一开始就足够懦弱,因为它是关于概念的,而不是关于内部的。你可以选择一个小的 wcf 服务,你也会有同样的(从 4.5 版开始),你可以解释一下,伙计
    猜你喜欢
    • 2014-09-17
    • 2013-06-13
    • 1970-01-01
    • 1970-01-01
    • 2010-09-14
    • 2011-05-29
    • 2014-02-26
    • 2020-05-25
    相关资源
    最近更新 更多