PHP 基于 Java 的 SOAP Web 服务的 XML SOAP 格式

PHP SOAP XML formatting for Java-based SOAP Web Service

当我使用 PHP 的 SOAP 库时,在 Java 上构建的 SOAP 服务器出现错误,因为信封的名称以 SOAP-ENV 为前缀。 Web 服务需要 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>

我已经阅读了 php.net'S SOAP library 文档。这部分似乎没有任何内容。

是的,对于此 Web 服务来说,它是否以 SOAP-ENV: 或 s: 为前缀很重要

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

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

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

如有任何帮助,我们将不胜感激。

这个解决方案对我有用。

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

阵列允许您触发一系列变化。