使用Matlab调用ZarinPal SOAP接口报错:对象字段仅允许在方法内访问
解决Matlab调用Zarinpal SOAP服务时的"Access to an object's fields is only permitted within its methods"错误
我来帮你搞定这个问题,这个错误其实是因为你调用SOAP方法的方式不对,加上Matlab自动生成的SOAP类有封装限制导致的。
首先看核心问题:你调用PaymentRequest的方式错了!Matlab里,通过createClassFromWsdl生成的SOAP服务类,它的方法都是对象成员方法,必须用「对象.方法名」的语法调用,而不是把对象作为第一个参数塞进函数里。
你的原代码是:
PaymentRequest(obj,'9b9eef82-7cde-11e7-b794-000c295eb8fc', 100 ,'comment','','','www.google.com')
这种写法是把PaymentRequest当成普通函数来用,但实际上它是PaymentGatewayImplementationService类的方法,正确的调用应该是这样:
response = obj.PaymentRequest('9b9eef82-7cde-11e7-b794-000c295eb8fc', 100 ,'comment','','','www.google.com');
为什么会报那个错误?
当你用普通函数的方式调用时,Matlab内部会尝试去访问obj的私有/受保护字段来完成SOAP请求,但这些字段是封装在类内部的,只有类自己的方法才能访问,外部直接触发这个逻辑就会抛出「只能在方法内访问对象字段」的错误。
如果需要修改服务端点(endpoint)怎么办?
你提到尝试替换obj.endpoint,这也是踩了同样的封装坑——不能直接给obj.endpoint赋值。正确的做法是用类自动生成的方法来修改,先看看这个类有哪些可用方法:
methods(obj)
通常生成的SOAP类会有setEndpoint方法,找到它之后就可以这样修改:
obj.setEndpoint('https://your-custom-endpoint-url');
这样就不会触发封装限制了。
总结一下,把调用方式改成对象点方法的形式,就能解决你遇到的错误啦!
内容的提问来源于stack exchange,提问作者یـوسـف نـیـری
相关产品推荐
相关产品推荐

