Как проанализировать SOAP XML в автономном режиме? - PullRequest
0 голосов
/ 30 октября 2018

Мне нужно проанализировать SOAP-запрос в автономном режиме. Все, что мне нужно, это получить method_name запроса и аргументы, чтобы передать их контроллеру, не генерируя никакого мыльного ответа на запрос.

У меня есть 2 способа: 1) создайте XML-ридер для SOAP-запроса и проанализируйте его вручную, или 2) использовать soapServer и перехватить его вывод с помощью обработчика буфера

Мне не нравится ничего из вышеперечисленного. Потому что первый не будет хорошим парсером, как PHP-мыльный сервер. В то время как второй использует вместо оригинального класса 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_name и arguments, чтобы передать их контроллеру. Никто не знает, как родной PHP SoapServer извлекает эти данные и как получить эти данные, не запуская всю функцию handle?

...