在使用类映射时使SOAP客户端具有更高的容错能力

时间:2015-10-13 15:34:30

标签: php soap wsdl

我正在为SOAP服务编写PHP包装器并使用类映射选项,因此我可以使用对象而不是数组。这很有效,直到SOAP服务的提供者决定向他们的一个对象添加一个新属性(他们似乎喜欢这样做而不告诉任何人),此时SOAP客户端因错误SOAP-ERROR: Encoding: object has no 'NewlyAddedProperty' property而破坏了wsdl中不属于类的属性。

我试图通过使用魔法吸气剂并返回falsenull之类的东西来解决它,但由于它们根据wsdl不是有效值,它仍然会引发致命的错误。

在理想的世界中,即使没有在类上定义属性,客户端也只会在对象上设置新属性,这可能吗?如果不仅仅是抑制错误也没关系。

2 个答案:

答案 0 :(得分:2)

您可以移除$http.get的类映射并使用另一个,例如jsonmapper

如果你的类被正确注释,它就像这个例子一样简单:

app.controller('CaseNamesController',function($http,$scope){
    $scope.names = [];

  $http.get('/json/caseNames.json')
    .success(function(response){
        console.log(response);
        $scope.names = response;
    })
    .error(function(response){
        $scope.names =[];
  });

});

答案 1 :(得分:1)

SOAP意味着基于HTTP的XML - SOAP服务的所有者不能也不应该知道所有调用它的系统。

这种脆弱性内置于SOAP接口中。该服务应根据其架构验证传入请求。除非他们使该路径可选,否则它将失败。没有'鸭子打字'内置。