1

我想实现一个 WSDL 服务。为了生成它的代码,我使用了不同的工具。当我使用 SoapUI 时,生成文件的方法如下:

*******************************************************
<soapenv:Envelope
    xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:tem="http://tempuri.org/">
    <soapenv:Header>
        <tem:AuthenticationHeader>
            <tem:TicketID>?</tem:TicketID>
        </tem:AuthenticationHeader>
    </soapenv:Header>
    <soapenv:Body>
        <tem:GetInfo>
            <tem:sNo>?</tem:sNo>
            <tem:source>?</tem:source>
        </tem:GetInfo>
    </soapenv:Body>
</soapenv:Envelope>

当我在 Chrome 上使用https://app.boomerangapi.com/时,此方法将是:

<x:Envelope
    xmlns:x="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:tem="http://tempuri.org/">
    <x:Header>
        <tem:AuthenticationHeader>
            <tem:TicketID>?</tem:TicketID>
        </tem:AuthenticationHeader>
    </x:Header>
    <x:Body>
        <tem:GetInfo>
            <tem:sNo>?</tem:sNo>
            <tem:source>?</tem:source>
        </tem:GetInfo>
    </x:Body>
</x:Envelope>

为什么生成的方法在命名空间中不同?!

该服务的来源可能有什么问题?!

4

1 回答 1

2

这两个 SOAP 主体完全相同。

元素标签中的命名空间前缀只是命名空间 URI 的符号简写。

XML 文档可以使用以 开头的属性定义名称空间前缀xmlns:

xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"

该属性意味着“此元素中的所有名称及其以开头的后代soapenv:实际上都是与 URI 关联的名称http://schemas.xmlsoap.org/soap/envelope/。”</p>

下面的命名空间定义是完全一样的;它只是指定了一个不同的前缀来用作相同 URI 的简写:

xmlns:x="http://schemas.xmlsoap.org/soap/envelope/"

因此,唯一的区别是这两个 XML 文档是如何引用“http://schemas.xmlsoap.org/soap/envelope/”URI:

  • 第一个文档指定以 开头的元素soapenv:与该 URI 相关联。
  • 第二个文档指定以 开头的元素x:与该 URI 相关联。

符号不同,但意思是一样的。它们实际上具有相同的内容。

于 2021-04-10T15:53:27.810 回答