php - 使用类映射时使 SOAP 客户端更具容错能力

标签 php soap wsdl

我正在为 SOAP 服务编写 PHP 包装器并使用类映射选项,这样我就可以使用对象而不是数组。在 SOAP 服务的提供者决定向他们的对象之一添加新属性(他们似乎喜欢在不告诉任何人的情况下这样做)之前,这一直有效,此时 SOAP 客户端因错误 SOAP-ERROR: Encoding 而中断: 对象没有“NewlyAddedProperty”属性,因为 wsdl 中现在有一个不在类中的属性。

我尝试通过使用魔术 setter/getter 并返回诸如 falsenull 等内容来解决它,但根据 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/

相关文章:

c# - 在 WCF 服务中向对象添加属性会破坏客户端

c# - xsd :decimal in WSDL 的限制

web-services - 将 xsd 导入 wsdl

coldfusion - 在 ColdFusion 中使用重定向的 Web 服务

web-services - WSDL 中的 targetNamespace 和命名空间

php - nginx 将数据不完整地传输到 unix 域套接字

php - 为什么在这种情况下需要 self::scope

php - 我可以在 PHP 中混合使用 MySQL API 吗?

php - php 中的查询未成功执行

soap - 如何使用 JIRA SOAP API 在问题上设置标签