#43462 [Opn->Fbk]: SOAPClient does not report an error if server returns an empty document
| From: | jani@php.net | Date: | Tue, 28 Apr 2009 18:34:45 +0000 |
| Subject: | #43462 [Opn->Fbk]: SOAPClient does not report an error if server returns an empty document | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-136462@lists.php.net to get a copy of this message | ||
ID: 43462
Updated by: jani@php.net
Reported By: andrew at is dot co dot za
-Status: Open
+Status: Feedback
Bug Type: SOAP related
Operating System: Fedora Core release 6
PHP Version: 5.2.5
New Comment:
Please try using this CVS snapshot:
http://snaps.php.net/php5.2-latest.tar.gz
For Windows:
http://windows.php.net/snapshots/
Previous Comments:
------------------------------------------------------------------------
[2007-11-30 10:57:26] andrew at is dot co dot za
Description:
------------
SOAPClient does not report an error when it issues a request to a
server and that server returns an empty document instead of a valid SOAP
response.
In the client.php script below, setting $break_me=false results in
SOAPClient not reporting an error. Setting $break_me=true results in the
SOAPFault 'looks like we got no XML document'. Both cases should return
this error.
Reproduce code:
---------------
server.php:
<?php
$break_me = false;
if ($break_me)
echo "Corrupt XML data";
?>
client.php:
<?php
$client = new SoapClient(dirname(__FILE__) . '/soaptest.wsdl',
array('exceptions' => false));
$ret = $client->Test123();
if (is_soap_fault($ret))
echo "SOAP Fault: " . $ret->faultstring;
else
echo "Result: '$ret'";
?>
soaptest.wsdl:
<?xml version="1.0"?>
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:tns="urn:soaptest"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
targetNamespace="urn:soaptest">
<types>
<xsd:schema targetNamespace="urn:soaptest"/>
</types>
<message name="Test123Input"/>
<message name="Test123Output">
<part name="return" type="xsd:string"/>
</message>
<portType name="SOAPTestPortType">
<operation name="Test123">
<input message="tns:Test123Input"/>
<output message="tns:Test123Output"/>
</operation>
</portType>
<binding name="SOAPTestBinding" type="tns:SOAPTestPortType">
<soap:binding xmlns="http://schemas.xmlsoap.org/wsdl/soap/"
style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation xmlns:default="http://schemas.xmlsoap.org/wsdl/soap/"
name="Test123">
<input xmlns:default="http://schemas.xmlsoap.org/wsdl/soap/">
<soap:body xmlns="http://schemas.xmlsoap.org/wsdl/soap/"
use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
namespace="urn:soaptest"/>
</input>
<output xmlns:default="http://schemas.xmlsoap.org/wsdl/soap/">
<soap:body xmlns="http://schemas.xmlsoap.org/wsdl/soap/"
use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
namespace="urn:soaptest"/>
</output>
</operation>
</binding>
<service name="SOAPTestService">
<port xmlns:default="http://schemas.xmlsoap.org/wsdl/soap/"
name="SOAPTestPort" binding="tns:SOAPTestBinding">
<soap:address xmlns="http://schemas.xmlsoap.org/wsdl/soap/"
location="http://localhost/server.php"/>
</port>
</service>
</definitions>
Expected result:
----------------
$ret in client.php should be a SOAPFault indicating that the server did
not return an XML document
Actual result:
--------------
$ret == null, resulting in output of "Result: ''"
There is no way do distinguish this null value from a null value
legitimately returned by a function on the SOAP server.
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=43462&edit=1