SOAP-body自动生成的命名空间

时间:2018-02-15 11:21:48

标签: soap xsd soapui xml-namespaces

我必须在单功能SOAP Web服务上做一些支持,而我无法理解WSDL文件的特定方面。生成的SOAP请求由SoapUI生成。

此服务的WSDL在定义部分(targetNamespace="tetra-river-common-types/trafficinfo")中指定targetNamespace。 如果我将WSDL文件加载到SoapUI中,它会完美地读取所有内容;任何定义都没有问题。此服务的类型在单个外部模式文件中定义,在WSDL文件中具有以下定义:

<wsdl:types>
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <xsd:import namespace="tetra-river-common-types" schemaLocation="tetra-river-interface.xsd" />
    </xsd:schema>
</wsdl:types>

但是,在将WSDL文件加载到SoapUI中并打开自动生成的请求后,它会显示以下内容:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tet="tetra-river-common-types">
   <soapenv:Header/>
   <soapenv:Body>
      <tet:TrafficInformation>
         <tet:Item1>?</tet:Item1>
         <!-- several other items with the tet: namespace prefixed -->
      </tet:TrafficInformation>
   </soapenv:Body>
</soapenv:Envelope>

我的问题是:SoapUI如何确定tet:命名空间?我在WSDL文件或XSD文件中都没有提到它。我假设它从targetNamespace获取前3个字符,但我不确定。 我面临的问题是webservice本身需要这个确切的消息,但tetra:作为命名空间。

1 个答案:

答案 0 :(得分:0)

如果您看到wsdl,则会导致命名空间导入,如下所示:

namespace="tetra-river-common-types"

如果您在soapUI中看到请求,则在第一行中具有相同的名称空间,前缀为tet,即

xmlns:tet="tetra-river-common-types"

因此,各个请求元素以tet为前缀。

在引用相同的命名空间时,前缀是什么并不重要。

有关命名空间的更多信息,请参阅here