我必须在单功能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:
作为命名空间。
答案 0 :(得分:0)
如果您看到wsdl,则会导致命名空间导入,如下所示:
namespace="tetra-river-common-types"
如果您在soapUI中看到请求,则在第一行中具有相同的名称空间,前缀为tet
,即
xmlns:tet="tetra-river-common-types"
因此,各个请求元素以tet
为前缀。
在引用相同的命名空间时,前缀是什么并不重要。
有关命名空间的更多信息,请参阅here