我正在为 SOAP 服务编写 PHP 包装器并使用类映射选项,这样我就可以使用对象而不是数组。在 SOAP 服务的提供者决定向他们的对象之一添加新属性(他们似乎喜欢在不告诉任何人的情况下这样做)之前,这一直有效,此时 SOAP 客户端因错误 SOAP-ERROR: Encoding 而中断: 对象没有“NewlyAddedProperty”属性
,因为 wsdl 中现在有一个不在类中的属性。
我尝试通过使用魔术 setter/getter 并返回诸如 false
、null
等内容来解决它,但根据 wsdl,它们不是有效值它仍然会抛出一个 fatal error 。
在理想情况下,即使类上没有定义属性,客户端也会在对象上设置新属性,这可能吗?如果不只是抑制错误也可以。
最佳答案
您可以删除SoapClient
的类映射并使用另一个类映射,例如jsonmapper。 .
如果你的类注释正确,就像这个例子一样简单:
class noBisnodePersonClient extends SoapClient {
// ...
/**
* sokPerson
* @param noBisnodePersonSok $PersonSokReq
* @return noBisnodePersonSokResponse
*/
public function sokPerson(noBisnodePersonSok $PersonSokReq){
$return = $this->__soapCall(
'sokPerson',
array($PersonSokReq),
array('uri'=>'http://dbonline.no/webservices/wsdl/PersonInfo')
);
$mapper = new JsonMapper();
$object = $mapper->map($return, new noBisnodePersonSokResponse);
return $object;
}
}
关于php - 使用类映射时使 SOAP 客户端更具容错能力,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33106819/