ID:               34643
 User updated by:  camka at email dot ee
 Reported By:      camka at email dot ee
 Status:           Closed
 Bug Type:         SOAP related
 Operating System: linux
 PHP Version:      5CVS-2005-09-26 (snap)
 Assigned To:      dmitry
 New Comment:

if i call function with parameter=NULL explicitly

$cl->get_it(NULL);

the default value is returned as a result. should be NULL value.


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

[2005-09-27 17:28:44] [EMAIL PROTECTED]

The bug is fixed in CVS HEAD, PHP_5_1 and PHP_5_0.

The wsdl file in report has mistakes. The fixed file can be found in
CVS: ext/soap/tests/bugs/bug34643.wsdl

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

[2005-09-26 23:18:52] [EMAIL PROTECTED]

Dmitry, check it out, please.

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

[2005-09-26 22:11:25] camka at email dot ee

the same behaviour with the latest snapshot.

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

[2005-09-26 17:43:31] [EMAIL PROTECTED]

Please try using this CVS snapshot:

  http://snaps.php.net/php5-latest.tar.gz
 
For Windows:
 
  http://snaps.php.net/win32/php5-win32-latest.zip



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

[2005-09-26 13:28:20] camka at email dot ee

Description:
------------
I want to set default value for the parameter passed to the remote
function in wsdl file. When working in non-wsdl mode, the default value
on server side is initiated with no problems. But when using wsdl file
for client/server initialization, the default value is processed
strange way.



Reproduce code:
---------------
======= srv.php ==========

class fp
{
        public function get_it($opt = 'zzz')
        {
                return $opt;
        }
}

$srv = new SoapServer('wsdl.wsdl');
$srv->setClass('fp');
$srv->handle();

======= client.php ==========

...
$cl = new SoapClient('wsdl.wsdl', $options);
var_dump($cl->__getFunctions());
echo $cl->get_it();

======== wsdl.wsdl ==========
<?xml version='1.0' encoding='UTF-8'?>

<definitions name="wsdl" targetNamespace="urn:wsdl"
xmlns:typens="urn:wsdl" xmlns:xsd="http://www.w3.org/2001/XMLSchema";
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/";
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/";
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/";
xmlns="http://schemas.xmlsoap.org/wsdl/";>
        <types>
                <xsd:schema xmlns="http://www.w3.org/2001/XMLSchema";
targetNamespace="urn:wsdl">

                        <xsd:element name="opt" default="zzz" />

                </xsd:schema>
        </types>
        <message name="get_it">
                <part name="opt" type="typens:opt"/>
        </message>
        <message name="get_itResponse">
                <part name="return" type="xsd:string"/>
        </message>
        <portType name="fpPortType">
                <operation name="get_it">
                        <documentation>
                                Enter description here...
                        </documentation>
                        <input message="typens:get_it"/>
                        <output message="typens:get_itResponse"/>
                </operation>
        </portType>
        <binding name="fpBinding" type="typens:fpPortType">
                <soap:binding style="rpc"
transport="http://schemas.xmlsoap.org/soap/http"/>
                <operation name="get_it">
                        <soap:operation soapAction="urn:fpAction"/>
                        <input>
                                <soap:body namespace="urn:wsdl" use="encoded"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
                        </input>
                        <output>
                                <soap:body namespace="urn:wsdl" use="encoded"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
                        </output>
                </operation>
        </binding>
        <service name="wsdlService">
                <port name="fpPort" binding="typens:fpBinding">
                        <soap:address location="**********/>
                </port>
        </service>
</definitions>


======== SOAP request ==============
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/";
xmlns:ns1="urn:wsdl"
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:Body>
<ns1:get_it>
<opt
xsi:nil="1"/>
</ns1:get_it>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

=========== SOAP Response =========
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/";
xmlns:ns1="urn:wsdl"
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:Body>
<ns1:get_itResponse>
<return xsi:nil="1"/>
</ns1:get_itResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>


Expected result:
----------------
array(1) {
  [0]=>
  string(27) "string get_it(opt $opt)"
}

zzz


Actual result:
--------------
array(1) {
  [0]=>
  string(27) "string get_it(UNKNOWN $opt)"
}

NULL


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


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

Reply via email to