2

是否要求每个模式必须在 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 是有效的吗?

4

1 回答 1

0

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

你的模式都在同一个命名空间中,所以如果你定义了同名的数据结构,这将是一个问题。

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

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

于 2016-11-29T14:02:52.587 回答