dmitry          Tue Sep 27 11:24:47 2005 EDT

  Added files:                 
    /php-src/ext/soap/tests/bugs        bug34643.phpt bug34643.wsdl 

  Modified files:              
    /php-src/ext/soap   soap.c 
  Log:
  Fixed bug #34643 (wsdl default value has no effect)
  
  
http://cvs.php.net/diff.php/php-src/ext/soap/soap.c?r1=1.160&r2=1.161&ty=u
Index: php-src/ext/soap/soap.c
diff -u php-src/ext/soap/soap.c:1.160 php-src/ext/soap/soap.c:1.161
--- php-src/ext/soap/soap.c:1.160       Mon Sep 12 04:23:49 2005
+++ php-src/ext/soap/soap.c     Tue Sep 27 11:24:47 2005
@@ -17,7 +17,7 @@
   |          Dmitry Stogov <[EMAIL PROTECTED]>                             |
   +----------------------------------------------------------------------+
 */
-/* $Id: soap.c,v 1.160 2005/09/12 08:23:49 dmitry Exp $ */
+/* $Id: soap.c,v 1.161 2005/09/27 15:24:47 dmitry Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -4018,9 +4018,21 @@
 {
        xmlNodePtr xmlParam;
        encodePtr enc;
+       zval defval;
 
        if (param != NULL) {
                enc = param->encode;
+               if (val == NULL || Z_TYPE_P(val) == IS_NULL) {
+                       if (param->element) {
+                               if (param->element->fixed) {
+                                       ZVAL_STRING(&defval, 
param->element->fixed, 0);
+                                       val = &defval;
+                               } else if (param->element->def && 
!param->element->nillable) {
+                                       ZVAL_STRING(&defval, 
param->element->def, 0);
+                                       val = &defval;
+                               }
+                       }
+               }
        } else {
                enc = NULL;
        }

http://cvs.php.net/co.php/php-src/ext/soap/tests/bugs/bug34643.phpt?r=1.1&p=1
Index: php-src/ext/soap/tests/bugs/bug34643.phpt
+++ php-src/ext/soap/tests/bugs/bug34643.phpt
--TEST--
Bug #34643 (wsdl default value)
--SKIPIF--
<?php require_once('skipif.inc'); ?>
--INI--
soap.wsdl_cache_enabled=0
--FILE--
<?php
ini_set("soap.wsdl_cache_enabled", 0);

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

class LocalSoapClient extends SoapClient {

  function __construct($wsdl, $options) {
    parent::__construct($wsdl, $options);
    $this->server = new SoapServer($wsdl, $options);
    $this->server->setClass('fp');
  }

  function __doRequest($request, $location, $action, $version) {
    ob_start();
    $this->server->handle($request);
    $response = ob_get_contents();
    ob_end_clean();
    return $response;
  }

}

$cl = new LocalSoapClient(dirname(__FILE__).'/bug34643.wsdl', 
array("trace"=>1));
print_r($cl->__getFunctions());
echo $cl->get_it("aaa")."\n";
echo $cl->get_it()."\n";
?>
--EXPECT--
Array
(
    [0] => string get_it(string $opt)
)
aaa
zzz

http://cvs.php.net/co.php/php-src/ext/soap/tests/bugs/bug34643.wsdl?r=1.1&p=1
Index: php-src/ext/soap/tests/bugs/bug34643.wsdl
+++ php-src/ext/soap/tests/bugs/bug34643.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" type="xsd:string" default="zzz" 
/>
                </xsd:schema>
        </types>
        <message name="get_it">
                <part name="opt" element="typens:opt"/>
        </message>
        <message name="get_itResponse">
                <part name="return" type="xsd:string"/>
        </message>
        <portType name="fpPortType">
                <operation name="get_it">
                        <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>

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to