ID:               49226
 User updated by:  richard at rjharrison dot org
 Reported By:      richard at rjharrison dot org
 Status:           Open
 Bug Type:         SOAP related
 Operating System: linux
 PHP Version:      5.3.0
 New Comment:

@sjoerd,

When I load the WSDL over HTTP there is no content-length header, as
the response is sent chunk-encoded. As stated in the original report, if
I save the WSDL to disk then it works, for example:-

<?php
$data = file_get_contents('http://myserver/path?wsdl');
file_put_contents("wsdl.xml", $data);
$serv = new SoapServer("wsdl.xml"); // works
?>


@stig,

The behaviour you describe with different size WSDL might backup the
theory that it's chunk-encoding related. With a small body size, I think
PHP *does* send a content-length header; but if the body is larger than
the output buffer (?) it will switch to chunk-encoding to allow for the
unknown, variable length.


Previous Comments:
------------------------------------------------------------------------

[2009-08-12 11:39:05] sjoerd-php at linuxonly dot nl

Thank you for your bug report.

When you retrieve the WSDL over HTTP, does the Content-Length header
match the length of the WSDL? You can try saving the WSDL to disk and
load that one instead.

------------------------------------------------------------------------

[2009-08-12 10:52:46] stig dot woxholt at fotoknudsen dot no

We have started porting our soap services from 5.2.x to 5.3 and see the
same problem here.

I have spend quite some time trying to identify the problem, and it
seemes to me that when the wsdl reaches a certain size it stops
working.

Ie. i have a service with 10 exposed methods. When all these methods
are exposed i get an error, same as Richards. If i cut down on the
number of exposed methods, to ie. 3 on the service it works.

This is services that is used in production on the 5.2.x builds, and
works perfectly there.

Looks to me that there might be a bug in the XML parsing of the WSDL
somewhere.

------------------------------------------------------------------------

[2009-08-11 19:30:45] richard at rjharrison dot org

Description:
------------
SoapServer is failing on construction. I pass an URL with *valid* WSDL
xml, which is generated automatically.

- If I save the WSDL locally and load from disk it works.
- If I serve the WSDL remotely from a static .xml file it works.
- If I load the WSDL-url in my browser I get a well-formed XML
response.
- I can access the dodgy-wsdl URL via file_get_contents.
- Using 5.2.6 on another machine it works fine.

I inspected the http requests and think it could be related to chunked
encoding (it fails on the chunked encoding response). 

Reproduce code:
---------------
<?php
$url  = 'http://myserver/path?wsdl';
$serv = new SoapServer($url);
?>

I can probably provide a sample url privately.

Expected result:
----------------
$serv to be instantiated



Actual result:
--------------
SOAP-ERROR: Parsing WSDL: Couldn't load from
'http://myserver/path?wsdl' : Premature end of data in tag definitions
line 2


Below are the headers of the response that fails:-

Date: Tue, 11 Aug 2009 19:15:29 GMT
Server: Apache/2.2.8 (Unix) DAV/2 PHP/5.3.0
X-powered-by: PHP/5.3.0
Vary: Accept-Encoding,User-Agent
Connection: close
Transfer-encoding: chunked
Content-type: text/xml


------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=49226&edit=1

Reply via email to