如何离线解析SOAP XML?

时间:2018-10-30 12:25:05

标签: php soap soapserver

我需要离线解析SOAP请求。 我所需要做的就是获取请求的method_name和参数,以将其传递给控制器​​,而无需生成对请求的任何响应。

我有2种方法: 1)为SOAP请求创建XML阅读器,并手动解析它,或者 2)使用soapServer并使用缓冲区处理程序捕获其输出

我不喜欢以上任何一个。因为第一个解析器不会像PHP本机soapServer那样是一个很好的解析器。虽然第二种方法使用原始的soapServer类代替,但是也使用OB处理程序,这是骇入库的丑陋方法,而不是使用干净的解析器。

这是第二种方法的实际代码:

class SoapServerOffline {

    public function handle($soapRequest) {
        $wsdl = "provider.wsdl";
        $options =[
            'features' => 1,
            'trace' => 1,
            'cache_wsdl' => WSDL_CACHE_NONE,
            'exceptions' => true,
        ];


        $soapServer = new SoapServer($wsdl,$options);
        $soapHandler = new SoapServerHandler($this);
        $soapServer->setObject($soapHandler);

        ob_start();
        $soapServer->handle($dataraw);
        ob_end_clean();

        $soapServer->postExecute($);
    }

    public function execute($method_name, $args) {
        //run logic here
    }

    public function postExecute() {
        //run post execute logic here
    }
}

class SoapServerHandler  {
    private $soapServerOffline;

    public function __construct(soapServerOffline $soapServerOffline) {
        $this->soapServerOffline = $soapServerOffline;
    }

    public function WSCorIDSOAPHeader() {
        //do nothing
    }

    public function __call ($method_name , $arguments) {
        $this->soapServerOffline->execute(
            $method_name,
            json_decode(json_encode($arguments[0]),true)
        ];
    }
}

我想代替此方法来检索method_namearguments并将它们传递给控制器​​。没有人知道PHP本机SoapServer如何检索这些数据以及如何在不运行所有handle函数的情况下获取这些数据吗?

0 个答案:

没有答案