dmitry Fri Nov 18 05:59:55 2005 EDT Added files: /php-src/ext/soap/tests/bugs bug35273.phpt
Modified files: /php-src/ext/soap php_sdl.c Log: Fixed bug #35273 (Error in mapping soap - java types) http://cvs.php.net/diff.php/php-src/ext/soap/php_sdl.c?r1=1.89&r2=1.90&ty=u Index: php-src/ext/soap/php_sdl.c diff -u php-src/ext/soap/php_sdl.c:1.89 php-src/ext/soap/php_sdl.c:1.90 --- php-src/ext/soap/php_sdl.c:1.89 Mon Oct 24 03:43:48 2005 +++ php-src/ext/soap/php_sdl.c Fri Nov 18 05:59:51 2005 @@ -17,7 +17,7 @@ | Dmitry Stogov <[EMAIL PROTECTED]> | +----------------------------------------------------------------------+ */ -/* $Id: php_sdl.c,v 1.89 2005/10/24 07:43:48 dmitry Exp $ */ +/* $Id: php_sdl.c,v 1.90 2005/11/18 10:59:51 dmitry Exp $ */ #include "php_soap.h" #include "ext/libxml/php_libxml.h" @@ -117,24 +117,40 @@ nscat[len] = '\0'; enc = get_encoder_ex(sdl, nscat, len); - efree(nscat); if (enc == NULL && ((ns_len == sizeof(SOAP_1_1_ENC_NAMESPACE)-1 && memcmp(ns, SOAP_1_1_ENC_NAMESPACE, sizeof(SOAP_1_1_ENC_NAMESPACE)-1) == 0) || (ns_len == sizeof(SOAP_1_2_ENC_NAMESPACE)-1 && memcmp(ns, SOAP_1_2_ENC_NAMESPACE, sizeof(SOAP_1_2_ENC_NAMESPACE)-1) == 0))) { - ns_len = sizeof(XSD_NAMESPACE)-1; - len = ns_len + type_len + 1; - nscat = emalloc(len + 1); - memcpy(nscat, XSD_NAMESPACE, sizeof(XSD_NAMESPACE)-1); - nscat[ns_len] = ':'; - memcpy(nscat+ns_len+1, type, type_len); - nscat[len] = '\0'; - - enc = get_encoder_ex(sdl, nscat, len); - efree(nscat); + char *enc_nscat; + int enc_ns_len; + int enc_len; + + enc_ns_len = sizeof(XSD_NAMESPACE)-1; + enc_len = enc_ns_len + type_len + 1; + enc_nscat = emalloc(enc_len + 1); + memcpy(enc_nscat, XSD_NAMESPACE, sizeof(XSD_NAMESPACE)-1); + enc_nscat[enc_ns_len] = ':'; + memcpy(enc_nscat+enc_ns_len+1, type, type_len); + enc_nscat[enc_len] = '\0'; + + enc = get_encoder_ex(NULL, enc_nscat, enc_len); + efree(enc_nscat); + if (enc && sdl) { + encodePtr new_enc = emalloc(sizeof(encode)); + memcpy(new_enc, enc, sizeof(encode)); + new_enc->details.ns = estrndup(ns, ns_len); + new_enc->details.type_str = estrdup(new_enc->details.type_str); + if (sdl->encoders == NULL) { + sdl->encoders = emalloc(sizeof(HashTable)); + zend_hash_init(sdl->encoders, 0, NULL, delete_encoder, 0); + } + zend_hash_update(sdl->encoders, nscat, len + 1, &new_enc, sizeof(encodePtr), NULL); + enc = new_enc; + } } + efree(nscat); return enc; } http://cvs.php.net/co.php/php-src/ext/soap/tests/bugs/bug35273.phpt?r=1.1&p=1 Index: php-src/ext/soap/tests/bugs/bug35273.phpt +++ php-src/ext/soap/tests/bugs/bug35273.phpt --TEST-- Bug #35273 Error in mapping soap - java types --SKIPIF-- <?php require_once('skipif.inc'); ?> --FILE-- <?php class TestSoapClient extends SoapClient { function __doRequest($request, $location, $action, $version) { echo $request; exit; } } ini_set("soap.wsdl_cache_enabled", 0); $client = new TestSoapClient(dirname(__FILE__).'/bug32941.wsdl', array("trace" => 1, 'exceptions' => 0)); $ahoj = $client->echoPerson(array("name"=>"Name","surname"=>"Surname")); echo "ok\n"; ?> --EXPECT-- <?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://service" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns2="urn:service.EchoService" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body><ns1:echoPerson><p xsi:type="ns2:Person"><name xsi:type="SOAP-ENC:string">Name</name><surname xsi:type="SOAP-ENC:string">Surname</surname></p></ns1:echoPerson></SOAP-ENV:Body></SOAP-ENV:Envelope> -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php