0

我正在编写一个 SOAP::Lite 客户端来使用 SOAP 服务器,该服务器有时会发送缺少命名空间规范的响应。这是我第一次用 SOAP 做任何事情,所以我根本不是很了解。这是一个示例响应:

HTTP/1.1 200 OK
Server: "OS/version" UPnP/1.0 "product/version"
Content-Length: 83219
Content-Type: text/xml; charset="UTF-8"
Client-Date: Tue, 01 Aug 2017 06:30:44 GMT
Client-Peer: 192.168.1.123:5000
Client-Response-Num: 1

<?xml version="1.0" encoding="UTF-6"?>
<soap-env:Envelope
        xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/"
        soap-env:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
        >
<soap-env:Body>
    <m:GetDataResponse
        xmlns:m="urn:BLACKBOX:service:DataSource:1">
        <DataBlob xsi:type="xsd:base64Binary">Ikf7SPJ...SsA==</DataBlob>
    </m:GetDataResponse>
    <ResponseCode>0</ResponseCode>
</soap-env:Body>
</soap-env:Envelope>

注意使用没有规范的“xsi”命名空间。'xsd' 也应该有一个?SOAP::Lite 给了我这个错误信息:

failed:  Unresolved prefix 'xsi' for attribute 'xsi:type'

鉴于我无法控制服务器,我将如何在客户端中使用 SOAP::Lite 解决此问题?我有什么方法可以告诉 SOAP::Lite 假设我提供的命名空间?

4

2 回答 2

0

只需添加到 SOAP::Lite 对象:

$soap->serializer->register_ns('http://www.w3.org/2001/XMLSchema' => 'xmlns:xsd');

$soap->serializer->register_ns('http://www.w3.org/2001/XMLSchema-instance' => 'xmlns:xsi');
于 2017-08-02T13:00:56.407 回答
0

服务器坏了,你应该提出一个错误。同时,你可以通过编辑传入的数据来让你的代码工作,添加

这些对Envelope元素的定义

xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
于 2017-08-01T12:04:28.923 回答