首页 > 解决方案 > 用于基于 Java 的 SOAP Web 服务的 PHP SOAP XML 格式

问题描述

当我使用 PHP 的 SOAP 库时,我从基于 Java 的 SOAP 服务器收到错误,因为信封的名称以 SOAP-ENV 为前缀。Web 服务需要:

我要发送的内容:

<?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>

Web 服务需要什么:

<?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>

我已经浏览过php.net 的 SOAP 库文档。这部分似乎没有任何内容。

是的,这个 Web 服务的前缀是 SOAP-ENV: 还是 s:

以下是生成当前 XML 样式的内容:

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

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

任何帮助将不胜感激。

标签: javaphpweb-servicessoap

解决方案


这个解决方案对我有用。

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);
    }
}

该数组允许您触发一系列更改。


推荐阅读