PHP SOAP XML-форматирование для веб-службы SOAP на основе Java - PullRequest
1 голос
/ 01 октября 2019

Я получаю сообщение об ошибке от сервера SOAP, построенного на Java, когда я использую PHP-библиотеку SOAP, потому что имя конверта имеет префикс SOAP-ENV. Веб-сервис требует s:

Что я отправляю:

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header>...</SOAP-ENV:Header>
<SOAP-ENV:Body>...</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Что требуется веб-сервису:

<?xml version="1.0" encoding="UTF-8"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header>...</s:Header>
<s:Body>...</s:Body>
</s:Envelope>

Я прошел через Библиотека SOAP php.net документация уже. Кажется, здесь ничего не трогать.

И да, для этого веб-сервиса имеет значение, имеет ли он префикс SOAP-ENV: или s:

Вот что генерирует текущий стильXML:

$client = new SoapClient($url, array(
    'soap_version' => SOAP_1_1,
    'trace' => 1,
    'use' => SOAP_LITERAL)
);

$result = $client->$method($dataObject);

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 17 октября 2019

Это решение сработало для меня.

class mySoapClient extends \SoapClient
{
    public function __doRequest($request, $location, $action, $version, $one_way = 0)
    {
        $request = str_replace(
            array('SOAP-ENV', 'other-text'),
            array('s', 'new-other-text'),
            $request
        );

        return parent::__doRequest($request, $location, $action, $version, $one_way);
    }
}

Массив позволяет запускать серию изменений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...