我正在开发一个项目,我正在使用内部托管的第三方应用程序的SOAP API(BMC FootPrints服务核心)。我可以使用PHP调用API,我的凭据很好,并且在一个特定的API方法中,我正在制作看起来像API函数的有效调用,但得到以下异常/错误:
SoapFault exception: [soap:Client] Unmarshalling Error: cvc-complex-type.2.4.b: The content of element 'ns1:runSearch' is not complete. One of '{runSearchRequest}' is expected
“{runSearchRequest}”中的一个“预期”部分是什么意思?我不明白我还需要包含我对API所做的请求。
可以在此处找到API文档,具体而言,第31页指的是我尝试使用的API方法,请参见此屏幕截图:image from PDF。
我不会发布所有代码,只是我尝试API方法的部分:
// array that will be used in the method call...
$searchFor = array(
"_searchId"=>"11",
);
try {
$response = $soapClient->__soapCall("runSearch", $searchFor);
print_r($response);
} catch (SoapFault $exception) {
echo $exception;
}
我使用SOAPUI applcation测试了方法调用,我能够看到结果/响应很好。
更新:添加WSDL xml(片段)...
我正在使用WSDL,但是它托管在我们的内部/本地网络上而不是外部公开,这里是XML的开始和来自该WSDL的runSearch类型:
<?xml version='1.0' encoding='UTF-8'?><wsdl:definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://externalapi.business.footprints.numarasoftware.com/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" name="ExternalApiService" targetNamespace="http://externalapi.business.footprints.numarasoftware.com/">
<wsdl:types>
<schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://xxxxxxxxxxxxxxxxxxxx.com/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns="http://www.w3.org/2001/XMLSchema">
<import namespace="xxxxxxxxxxxxxxxxxxxxxxxx" schemaLocation="http://xxxxxxxxxxxxxxxxxxxxxxxx:PORT/footprints/servicedesk/externalapisoap/ExternalApiServicePort?xsd=externalapiservices_schema.xsd"/>
</schema>
</wsdl:types>
...
<wsdl:message name="runSearch">
<wsdl:part element="tns:runSearch" name="parameters">
</wsdl:part>
</wsdl:message>
答案 0 :(得分:1)
该错误表示您的runSearchReqeust
结构(即您的$searchFor
)缺少信息。您提供的文档表明runSearch()
调用的签名如下:
runSearchResponse runSearch(runSearch $runSearch)
此外,runSearch
数据类型将包含一个类型为RunSearchRequest
的字段。
所以你需要一个包含元素'runSearchRequest'
的数据结构,它本身就是另一个包含_searchId
的数据结构
尝试:
$searchFor = array(
'runSearchRequest' => array(
"_searchId" => "11",
)
);
将您的电话改为:
$response = $soapClient->runSearch($searchFor);
或者:
$response = $soapClient->__soapCall("runSearch", array($searchFor));
这将生成一个SOAP XML请求,该请求与doc:
中的请求非常匹配<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ns1="http://externalapi.business.footprints.numarasoftware.com/">
<SOAP-ENV:Body>
<ns1:runSearch>
<runSearchRequest>
<_searchId>11</_searchId>
</runSearchRequest>
</ns1:runSearch>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
答案 1 :(得分:0)
编组错误可能由于两个原因而发生:
Exception: Unmarshalling Error: null
:如果键后有空格Exception: Unmarshalling Error: For input string: "233,43"
:因为金额必须为233.43