WSDL是否应为每个模式

时间:2016-09-08 07:28:10

标签: soap wsdl node-soap

是否要求每个模式在wsdl中都必须具有唯一的命名空间? 有关示例,请考虑以下WSDL代码段,该代码段没有架构的命名空间。

<wsdl:types>
 <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:import namespace="http://example.com/WSDL/service/1.0.0/" schemaLocation="GetFilterValuesRequest.xsd"/>
 </xsd:schema>
 <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:import namespace="http://example.com/WSDL/service/1.0.0/" schemaLocation="GetFilterValuesReply.xsd"/>
 </xsd:schema>
 <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:import namespace="http://example.com/WSDL/service/1.0.0/" schemaLocation="IRequest.xsd"/>
 </xsd:schema>
 <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:import namespace="http://example.com/WSDL/service/1.0.0/" schemaLocation="IReply.xsd"/>
 </xsd:schema>
</wsdl:types>

我问的原因是因为我正在使用node-soap库来编写WSDL服务,当架构中存在冲突的命名空间或根本没有命名空间时,库服务不起作用。

当发送SOAP请求时,它会发出错误Cannot read property 'input' of undefined,因为它会根据命名空间构建模式映射,然后无法找到给定请求的唯一模式。

我不想详细介绍错误或修复错误,但是,想要了解这是WSDL成为有效错误所必需的东西吗?

1 个答案:

答案 0 :(得分:0)

是SOAP服务器需要名称空间才能与大多数客户端一起正常运行。

您的模式都在同一名称空间中,因此如果您使用相同的名称定义数据结构,这将是一个问题。

XML中的命名空间就像编程语言中的命名空间一样。它们可以防止同名的数据类型相互冲突。

请注意,命名空间不必是URL。这只是一个惯例。它可以是任何东西,它只需要是独一无二的。