【问题标题】:type or element in WSDL types sectionWSDL 类型部分中的类型或元素
【发布时间】:2013-02-16 21:33:56
【问题描述】:

在 wsdl <types/> 部分中定义类型时,我似乎有一些选择。

如果我定义了一个类型(简单或复杂),那么我可以像这样引用该类型:<message> <part name="x" type="tns:myTypeName"/>

如果我将<types/> 部分中的元素定义为<element/>,那么我可以这样引用它:<message> <part name="x" element="myElementName"/>

这两个选项似乎都通过了验证。我已经看到了一些元素方法的例子,但我没有看到类型方法有什么问题。哪一个是正确的?

【问题讨论】:

    标签: xml web-services xsd wsdl


    【解决方案1】:

    两者都是一个选项,但它们有不同的含义。

    如果您使用元素,您将在消息中指定元素的名称、命名空间和类型。如果您指定type,那么您只是指定类型。那么在实践中,WSDL message 元素中的part 指定了元素的名称,但是命名空间是不明确的。

    这是不兼容的常见原因。 WS-I BP 1.1 规范指定使用element,而不是type,因为这样可以防止歧义。


    我已经有几年没有阅读 WS-I BP 1.1 文档了。我现在记得它比我回忆的要复杂。

    如果您要创建 RPC/Literal 服务,则必须使用 type。如果要创建文档/文字服务,则必须使用 element。在这两种情况下,WSDL 中namespace 属性的使用都受到限制,原因是我指定的:防止歧义。

    请参阅4.7.21. Namespaces for Children of Part Accessors

    WS-I 的存在暗示了一件事情:不要手动创建 WSDL,期望模式验证为您生成有效的服务。相反,请使用您选择的 Web 服务框架提供的工具。这至少可以将您产生的歧义的种类数量减少到每个框架一组。

    【讨论】:

    • 看起来我们几乎同时找到了答案。我的回答是否正确,至于每条消息的类型参考限制为一个部分?另外,RPC/Encoded 呢?
    • 不,你的答案是倒退的。 Document/Literal 仅限于一个部分,但对于 RPC/Literal,每个参数可以有一个部分。此外,WS-I BP 1.1 禁止编码格式。
    • 你读的怎么样?根据以下文章文档/文字每条消息可以有多个部分:ibm.com/developerworks/webservices/library/ws-whichwsdl 尽管根据这篇文章,多个类型指定的部分也是允许的
    • 您可能已经注意到我指的是 WS-I BP 1.1 文档,而不是 IBM。
    • 我明白了。那么,WS-I 规范中的任何内容都会胜过 IBM 文章或 w3c wsdl 1.1 规范中的任何规范吗?如果一个人不关注个人资料,会有什么问题吗?
    【解决方案2】:

    好的,我刚刚找到了答案。根据规范,任何一个都是一种选择。 http://www.w3.org/TR/wsdl#_messages

    这似乎暗示如果使用类型,则只允许一部分。使用元素引用可以在消息中指定许多部分。然而,情况似乎并非如此。详情参考以上John Saunder's post

    【讨论】:

      猜你喜欢
      • 2010-11-13
      • 1970-01-01
      • 2021-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-06
      • 1970-01-01
      相关资源
      最近更新 更多