PHPのSoapClientで、名前空間の接頭辞をns1から任意のものに変えたい場合
<?php /** * SoapClientを継承するクラスにて、__doRequest()メソッドをオーバーライドする */ class MySoapClient extends SoapClient { public function __doRequest($request, $location, $action, $version, $one_way = 0) { $request = preg_replace('/xmlns:ns1/', 'xmlns:myns', $request); $request = preg_replace('/<ns1:/', '<myns:', $request); $request = preg_replace('/<\/ns1:/', '</myns:', $request); return parent::__doRequest($request, $location, $action, $version, $one_way); } } $soapObj = new MySoapClient( null, array( 'soap_version' => SOAP_1_1, 'location' => 'http://example.com/', 'uri' => 'http://example.com/', 'use' => SOAP_LITERAL, )); $soapObj->MethodName( new SoapParam('value', 'param') );
上記のように、SoapClientクラスを継承し、オーバーライドした__doRequest()メソッドにて ns1 を任意の文字列に置換すれば、下記のようなリクエストをサーバに送ることができる。
<?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:myns="http://example.com"> <SOAP-ENV:Body> <myns:MethodName> <param>value</param> </myns:MethodName> </SOAP-ENV:Body> </SOAP-ENV:Envelope>