PHP SOAP客户端分配的命名空间错误



我在SOAP方面几乎没有经验。我正在与第三方wsdl web服务交互。为此,我使用了PHP的原生SoapClient。

当我发送请求时,我得到了一个错误响应,其中包含以下内容:

Schema validation failed: cvc-complex-type.2.4.b: Content of element 'ns2:ScheduleP' is not complete. '{"http://blabla.com/webservices/offer/request":List}' is expected.

自动生成的XML的相关部分如下:

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ns1="http://blabla.com/webservices/offer/request"
xmlns:ns2="http://blabla.com/webservices/datatypes/data"
xmlns:ns3="http://blabla.com/webservices/offer/response"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>
<SOAP-ENV:Body>
<ns1:OfferRequest>
<ns1:Header us="my-user" sig="42fc731ee1f1c1" tnr="532709" t="20220301120026"/>
<ns1:RequestData>
<ns1:ScheduleP  xsi:type="ns3:Schedule">
<ns3:List>
<ns3:Item/>
</ns3:List>
</ns1:ScheduleP>
</ns1:RequestData>
</ns1:OfferRequest>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

如果我使用自动生成的XML,将List和Item节点的名称空间别名从ns3更改为ns1,并通过邮递员发送,它的工作原理就像一个魅力。

我认为问题是ns1命名空间和ns2命名空间都有一个ScheduleP、List和Item的规范。并且PHP SoapClient正在为List和Item节点分配错误的命名空间别名。

只是为了澄清一下,这是有效的XML:

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ns1="http://blabla.com/webservices/offer/request"
xmlns:ns2="http://blabla.com/webservices/datatypes/data"
xmlns:ns3="http://blabla.com/webservices/offer/response"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>
<SOAP-ENV:Body>
<ns1:OfferRequest>
<ns1:Header us="my-user" sig="42fc731ee1f1c1" tnr="532709" t="20220301120026"/>
<ns1:RequestData>
<ns1:ScheduleP  xsi:type="ns3:Schedule">
<ns1:List>
<ns1:Item/>
</ns1:List>
</ns1:ScheduleP>
</ns1:RequestData>
</ns1:OfferRequest>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

我不知道如何继续,如何修复名称空间的分配失误?

找到了一个解决方案。由于我有一个扩展PHP SoapClient的类,我可以重写__doRequest((函数,该函数接收生成的XML字符串作为其第一个参数,然后您可以对该字符串应用任何修改,最后调用parent::__doRequest

相关内容

  • 没有找到相关文章

最新更新