我在 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>
我不知道如何繼續,如何解決這種命名空間的錯誤分配?
uj5u.com熱心網友回復:
找到了解決方案。由于我有一個擴展 PHP 的 SoapClient 的類,我可以重寫接收生成的 XML 字串作為其第一個引數的 __doRequest() 函式,然后您可以對該字串應用任何修改,最后呼叫 parent::__doRequest() 發送它.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/468469.html
下一篇:彈性搜索中的術語和間隔聚合