dmitry          Mon Apr 10 13:29:57 2006 UTC

  Modified files:              
    /php-src/ext/soap   php_encoding.c 
    /php-src/ext/soap/tests/bugs        bug36908.phpt bug36908.wsdl 
  Log:
  Fixed bug #36908 (wsdl default value overrides value in soap request).
  
  
http://cvs.php.net/viewcvs.cgi/php-src/ext/soap/php_encoding.c?r1=1.124&r2=1.125&diff_format=u
Index: php-src/ext/soap/php_encoding.c
diff -u php-src/ext/soap/php_encoding.c:1.124 
php-src/ext/soap/php_encoding.c:1.125
--- php-src/ext/soap/php_encoding.c:1.124       Sun Apr  9 23:38:30 2006
+++ php-src/ext/soap/php_encoding.c     Mon Apr 10 13:29:57 2006
@@ -17,7 +17,7 @@
   |          Dmitry Stogov <[EMAIL PROTECTED]>                             |
   +----------------------------------------------------------------------+
 */
-/* $Id: php_encoding.c,v 1.124 2006/04/09 23:38:30 andrei Exp $ */
+/* $Id: php_encoding.c,v 1.125 2006/04/10 13:29:57 dmitry Exp $ */
 
 #include <time.h>
 
@@ -1130,11 +1130,13 @@
 {
        switch (model->kind) {
                case XSD_CONTENT_ELEMENT:
-                 if (model->u.element->name) {
-                       xmlNodePtr node = get_node(data->children, 
model->u.element->name);
-                       if (node) {
-                               zval *val;
+                       if (model->u.element->name) {
+                               xmlNodePtr node = get_node(data->children, 
model->u.element->name);
 
+                               if (node) {
+                                       zval *val;
+
+                                       node = check_and_resolve_href(node);
                                        if (node && node->children && 
node->children->content) {
                                                if (model->u.element->fixed && 
strcmp(model->u.element->fixed,node->children->content) != 0) {
                                                        soap_error3(E_ERROR, 
"Encoding: Element '%s' has fixed value '%s' (value '%s' is not allowed)", 
model->u.element->name, model->u.element->fixed, node->children->content);
http://cvs.php.net/viewcvs.cgi/php-src/ext/soap/tests/bugs/bug36908.phpt?r1=1.1&r2=1.2&diff_format=u
Index: php-src/ext/soap/tests/bugs/bug36908.phpt
diff -u /dev/null php-src/ext/soap/tests/bugs/bug36908.phpt:1.2
--- /dev/null   Mon Apr 10 13:29:57 2006
+++ php-src/ext/soap/tests/bugs/bug36908.phpt   Mon Apr 10 13:29:57 2006
@@ -0,0 +1,46 @@
+--TEST--
+Bug #36908 (wsdl default value overrides value in soap request)
+--SKIPIF--
+<?php 
+  if (!extension_loaded('soap')) die('skip soap extension not available');
+?>
+--INI--
+soap.wsdl_cache_enabled=0
+--FILE--
+<?php
+class PublisherService {
+  function add($publisher) {
+    return $publisher->region_id;
+  }
+}
+$input =
+'<?xml version="1.0" encoding="UTF-8"?>
+<soapenv:Envelope
+xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/";
+xmlns:xsd="http://www.w3.org/2001/XMLSchema";
+xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
+  <soapenv:Body>
+    <ns1:add xmlns:ns1="urn:PublisherService" 
soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/";>
+      <publisher href="#id0"/>
+    </ns1:add>
+    <multiRef xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/";
+xmlns:ns3="http://soap.dev/soap/types"; id="id0" soapenc:root="0"
+soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/";
+xsi:type="ns3:publisher">
+      <region_id href="#id5"/>
+    </multiRef>
+    <multiRef xmlns:ns5="http://soap.dev/soap/types";
+xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"; id="id5"
+soapenc:root="0"
+soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/";
+xsi:type="xsd:long">9</multiRef>
+  </soapenv:Body>
+</soapenv:Envelope>';
+ini_set('soap.wsdl_cache_enabled', false);
+$server = new SoapServer(dirname(__FILE__)."/bug36908.wsdl");
+$server->setClass("PublisherService");
+$server->handle($input);
+?>
+--EXPECT--
+<?xml version="1.0" encoding="UTF-8"?>
+<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"; 
xmlns:ns1="urn:PublisherService" 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:addResponse><out
 
xsi:type="xsd:string">9</out></ns1:addResponse></SOAP-ENV:Body></SOAP-ENV:Envelope>
http://cvs.php.net/viewcvs.cgi/php-src/ext/soap/tests/bugs/bug36908.wsdl?r1=1.1&r2=1.2&diff_format=u
Index: php-src/ext/soap/tests/bugs/bug36908.wsdl
diff -u /dev/null php-src/ext/soap/tests/bugs/bug36908.wsdl:1.2
--- /dev/null   Mon Apr 10 13:29:57 2006
+++ php-src/ext/soap/tests/bugs/bug36908.wsdl   Mon Apr 10 13:29:57 2006
@@ -0,0 +1,51 @@
+<?xml version="1.0"?>
+<wsdl:definitions 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:api="http://soap.dev/soap/PublisherService";
+xmlns:types="http://soap.dev/soap/types";
+targetNamespace="http://soap.dev/soap/PublisherService";>
+  <wsdl:types>
+    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema";
+xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/";
+xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/";
+xmlns:types="http://soap.dev/soap/types";
+targetNamespace="http://soap.dev/soap/types";>
+      <xsd:complexType name="publisher">
+        <xsd:all>
+          <xsd:element name="region_id" type="xsd:long" default="52"/>
+        </xsd:all>
+      </xsd:complexType>
+    </xsd:schema> 
+  </wsdl:types>
+  <wsdl:message name="addInput">
+    <wsdl:part name="publisher" type="types:publisher"/>
+  </wsdl:message>
+  <wsdl:message name="addOutput">
+    <wsdl:part name="out" type="xsd:string"/>
+  </wsdl:message>
+  <wsdl:portType name="PublisherServicePortType">
+    <wsdl:operation name="add">
+      <wsdl:input message="api:addInput"/>
+      <wsdl:output message="api:addOutput"/>
+    </wsdl:operation>
+  </wsdl:portType>
+  <wsdl:binding name="PublisherServiceBinding" 
type="api:PublisherServicePortType">
+    <soap:binding style="rpc" 
transport="http://schemas.xmlsoap.org/soap/http"/>
+    <wsdl:operation name="add">
+      <soap:operation soapAction="urn:PublisherService#add" style="rpc"/>
+      <wsdl:input>
+        <soap:body use="encoded" namespace="urn:PublisherService" 
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
+      </wsdl:input>
+      <wsdl:output>
+        <soap:body use="encoded" namespace="urn:PublisherService" 
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
+      </wsdl:output>
+    </wsdl:operation>
+  </wsdl:binding>
+  <wsdl:service name="PublisherService">
+    <wsdl:port name="PublisherServicePort" 
binding="api:PublisherServiceBinding">
+      <soap:address location="http://soap.dev/soap//publisher_test.php"/>
+    </wsdl:port>
+  </wsdl:service>
+</wsdl:definitions>

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

Reply via email to