#31755 [Fbk->Asn]: Cannot create SOAP header in no namespace
| From: | amt@php.net | Date: | Mon, 31 Jan 2005 17:35:39 +0000 |
| Subject: | #31755 [Fbk->Asn]: Cannot create SOAP header in no namespace | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-73128@lists.php.net to get a copy of this message | ||
ID: 31755
Updated by: amt@php.net
Reported By: adam at trachtenberg dot com
-Status: Feedback
+Status: Assigned
Bug Type: SOAP related
Operating System: n/a
PHP Version: 5CVS-2005-01-29 (dev)
Assigned To: dmitry
New Comment:
Thanks. Using "https://adwords.google.com/api/adwords/v2"
does work.
I talked with the people at Google, and I guess some SOAP toolkits are
not sophisticated enough to produce SOAP headers inside a specific
namespace, which is why the other option is available.
However, I still think it's a bug that you can do this:
new SOAPHeader(null, 'foo', 'bar');
As you end up putting element "foo" in an empty namespace. I believe
that is illegal XML. (xmllint issues a warning if this happens.)
Previous Comments:
------------------------------------------------------------------------
[2005-01-31 16:17:24] dmitry@php.net
SOAP specification doesn't allow non-namespace-qualified headers.
I am not sure, but I think you sould use
"https://adwords.google.com/api/adwords/v2"
as namespace for these SOAP
headers.
------------------------------------------------------------------------
[2005-01-29 22:48:36] adam at trachtenberg dot com
Description:
------------
You cannot create a SOAP header that is in no namespace. (This
is required by the new Google Adwords SOAP API, see https://
adwords.google.com/api/adwords/v2/TrafficEstimatorService?
wsdl.)
Furthermore, the SOAPHeader class allows you to create headers
in an empty namespace, by passing in null or "" for the
namespace URI. This is illegal. (Unless defined as the default
namespace.)
The extension should be changed to place these elements in no
namespace instead.
Reproduce code:
---------------
$client=new SOAPClient(null, array('location' => 'http://localhost',
'uri' => 'myNS', 'exceptions' => false, 'trace' =>
true));
$header = new SOAPHeader(null, 'foo', 'bar');
$response= $client->__call('function', array(), null, $header);
print $client->__getLastRequest();
Expected result:
----------------
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/
soap/envelope/" xmlns:ns1="myNS" xmlns:xsd="http://www.w3.org/
2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-
instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/
encoding/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/
soap/encoding/"><SOAP-ENV:Header><foo>bar<foo></SOAP-
ENV:Header><SOAP-ENV:Body><ns1:function/></SOAP-ENV:Body></
SOAP-ENV:Envelope>
Actual result:
--------------
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/
soap/envelope/" xmlns:ns1="myNS" xmlns:ns2=""
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/
encoding/"><SOAP-ENV:Header><ns2:foo>bar</ns2:foo></SOAP-
ENV:Header><SOAP-ENV:Body><ns1:function/></SOAP-ENV:Body></
SOAP-ENV:Envelope>
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=31755&edit=1