]> granicus.if.org Git - php/commitdiff
Fixed bug #34453 (parsing http://www.w3.org/2001/xml.xsd exception)
authorDmitry Stogov <dmitry@php.net>
Wed, 28 Sep 2005 11:23:32 +0000 (11:23 +0000)
committerDmitry Stogov <dmitry@php.net>
Wed, 28 Sep 2005 11:23:32 +0000 (11:23 +0000)
ext/soap/php_schema.c
ext/soap/tests/bugs/bug34453.phpt [new file with mode: 0755]
ext/soap/tests/bugs/bug34453.wsdl [new file with mode: 0755]
ext/soap/tests/bugs/xml2.xsd [new file with mode: 0755]

index 2446b6b67fad3241e47c1959c3a2e1488a1a8783..d6183ffc939b7f6eae4abb56fdd1ec69b2395b3c 100644 (file)
@@ -534,10 +534,6 @@ static int schema_union(sdlPtr sdl, xmlAttrPtr tns, xmlNodePtr unionType, sdlTyp
                if (node_is_equal(trav,"simpleType")) {
                        sdlTypePtr newType, *tmp;
 
-                       if (memberTypes != NULL) {
-                               soap_error0(E_ERROR, "Parsing Schema: union has both 'memberTypes' attribute and subtypes");
-                       }
-
                        newType = emalloc(sizeof(sdlType));
                        memset(newType, 0, sizeof(sdlType));
 
diff --git a/ext/soap/tests/bugs/bug34453.phpt b/ext/soap/tests/bugs/bug34453.phpt
new file mode 100755 (executable)
index 0000000..7b6bba0
--- /dev/null
@@ -0,0 +1,41 @@
+--TEST--
+Bug #29839 incorrect convert (xml:lang to lang)
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+
+function EchoString($s) {
+  return $s;
+}
+
+class LocalSoapClient extends SoapClient {
+
+  function __construct($wsdl, $options) {
+    parent::__construct($wsdl, $options);
+    $this->server = new SoapServer($wsdl, $options);
+    $this->server->addFunction('EchoString');
+  }
+
+  function __doRequest($request, $location, $action, $version) {
+    ob_start();
+    $this->server->handle($request);
+    $response = ob_get_contents();
+    ob_end_clean();
+    return $response;
+  }
+
+}
+
+$client = new LocalSoapClient(dirname(__FILE__)."/bug34453.wsdl", array("trace"=>1)); 
+$client->EchoString(array("value"=>"hello","lang"=>"en"));
+echo $client->__getLastRequest();
+echo $client->__getLastResponse();
+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://test-uri"><SOAP-ENV:Body><string xml:lang="en"><ns1:value>hello</ns1:value></string></SOAP-ENV:Body></SOAP-ENV:Envelope>
+<?xml version="1.0" encoding="UTF-8"?>
+<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri"><SOAP-ENV:Body><string xml:lang="en"><ns1:value>hello</ns1:value></string></SOAP-ENV:Body></SOAP-ENV:Envelope>
+ok
\ No newline at end of file
diff --git a/ext/soap/tests/bugs/bug34453.wsdl b/ext/soap/tests/bugs/bug34453.wsdl
new file mode 100755 (executable)
index 0000000..205e1c9
--- /dev/null
@@ -0,0 +1,42 @@
+<definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://test-uri" targetNamespace="http://test-uri">\r
+       <types>\r
+               <xs:schema targetNamespace="http://test-uri" elementFormDefault="qualified">\r
+                       <import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="xml2.xsd" />\r
+                       <complexType name="LocalizedString">\r
+                               <sequence>\r
+                                       <element name="value" type="xsd:string"/>\r
+                               </sequence>\r
+                               <attribute ref="xml:lang" use="required"/>\r
+                       </complexType>\r
+               </xs:schema>\r
+       </types>\r
+       <message name="EchoStringRequest">\r
+               <part name="string" type="tns:LocalizedString"/>\r
+       </message>\r
+       <message name="EchoStringResponse">\r
+               <part name="string" type="tns:LocalizedString"/>\r
+       </message>\r
+       <portType name="AWSProductDataPortType">\r
+               <operation name="EchoString">\r
+                       <input message="tns:EchoStringRequest"/>\r
+                       <output message="tns:EchoStringResponse"/>\r
+               </operation>\r
+       </portType>\r
+       <binding name="AWSProductDataBinding" type="tns:AWSProductDataPortType">\r
+               <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>\r
+               <operation name="EchoString">\r
+                       <soap:operation soapAction="http://test-uri"/>\r
+                       <input>\r
+                               <soap:body use="literal"/>\r
+                       </input>\r
+                       <output>\r
+                               <soap:body use="literal"/>\r
+                       </output>\r
+               </operation>\r
+       </binding>\r
+       <service name="AWSProductData">\r
+               <port name="AWSProductDataPort" binding="tns:AWSProductDataBinding">\r
+                       <soap:address location="http://aws-beta.amazon.com/onca/soap?Service=AWSProductData"/>\r
+               </port>\r
+       </service>\r
+</definitions>\r
diff --git a/ext/soap/tests/bugs/xml2.xsd b/ext/soap/tests/bugs/xml2.xsd
new file mode 100755 (executable)
index 0000000..a8e2185
--- /dev/null
@@ -0,0 +1,146 @@
+<?xml version='1.0'?>
+<xs:schema targetNamespace="http://www.w3.org/XML/1998/namespace" xmlns:xs="http://www.w3.org/2001/XMLSchema" xml:lang="en">
+
+ <xs:annotation>
+  <xs:documentation>
+   See http://www.w3.org/XML/1998/namespace.html and
+   http://www.w3.org/TR/REC-xml for information about this namespace.
+
+    This schema document describes the XML namespace, in a form
+    suitable for import by other schema documents.  
+
+    Note that local names in this namespace are intended to be defined
+    only by the World Wide Web Consortium or its subgroups.  The
+    following names are currently defined in this namespace and should
+    not be used with conflicting semantics by any Working Group,
+    specification, or document instance:
+
+    base (as an attribute name): denotes an attribute whose value
+         provides a URI to be used as the base for interpreting any
+         relative URIs in the scope of the element on which it
+         appears; its value is inherited.  This name is reserved
+         by virtue of its definition in the XML Base specification.
+
+    id   (as an attribute name): denotes an attribute whose value
+         should be interpreted as if declared to be of type ID.
+         The xml:id specification is not yet a W3C Recommendation,
+         but this attribute is included here to facilitate experimentation
+         with the mechanisms it proposes.  Note that it is _not_ included
+         in the specialAttrs attribute group.
+
+    lang (as an attribute name): denotes an attribute whose value
+         is a language code for the natural language of the content of
+         any element; its value is inherited.  This name is reserved
+         by virtue of its definition in the XML specification.
+  
+    space (as an attribute name): denotes an attribute whose
+         value is a keyword indicating what whitespace processing
+         discipline is intended for the content of the element; its
+         value is inherited.  This name is reserved by virtue of its
+         definition in the XML specification.
+
+    Father (in any context at all): denotes Jon Bosak, the chair of 
+         the original XML Working Group.  This name is reserved by 
+         the following decision of the W3C XML Plenary and 
+         XML Coordination groups:
+
+             In appreciation for his vision, leadership and dedication
+             the W3C XML Plenary on this 10th day of February, 2000
+             reserves for Jon Bosak in perpetuity the XML name
+             xml:Father
+  </xs:documentation>
+ </xs:annotation>
+
+ <xs:annotation>
+  <xs:documentation>This schema defines attributes and an attribute group
+        suitable for use by
+        schemas wishing to allow xml:base, xml:lang or xml:space attributes
+        on elements they define.
+
+        To enable this, such a schema must import this schema
+        for the XML namespace, e.g. as follows:
+        &lt;schema . . .>
+         . . .
+         &lt;import namespace="http://www.w3.org/XML/1998/namespace"
+                    schemaLocation="http://www.w3.org/2001/03/xml.xsd"/>
+
+        Subsequently, qualified reference to any of the attributes
+        or the group defined below will have the desired effect, e.g.
+
+        &lt;type . . .>
+         . . .
+         &lt;attributeGroup ref="xml:specialAttrs"/>
+         will define a type which will schema-validate an instance
+         element with any of those attributes</xs:documentation>
+ </xs:annotation>
+
+ <xs:annotation>
+  <xs:documentation>In keeping with the XML Schema WG's standard versioning
+   policy, this schema document will persist at
+   http://www.w3.org/2005/08/xml.xsd.
+   At the date of issue it can also be found at
+   http://www.w3.org/2001/xml.xsd.
+   The schema document at that URI may however change in the future,
+   in order to remain compatible with the latest version of XML Schema
+   itself, or with the XML namespace itself.  In other words, if the XML
+   Schema or XML namespaces change, the version of this document at
+   http://www.w3.org/2001/xml.xsd will change
+   accordingly; the version at
+   http://www.w3.org/2005/08/xml.xsd will not change.
+  </xs:documentation>
+ </xs:annotation>
+
+ <xs:attribute name="lang">
+  <xs:annotation>
+   <xs:documentation>Attempting to install the relevant ISO 2- and 3-letter
+         codes as the enumerated possible values is probably never
+         going to be a realistic possibility.  See
+         RFC 3066 at http://www.ietf.org/rfc/rfc3066.txt and the IANA registry
+         at http://www.iana.org/assignments/lang-tag-apps.htm for
+         further information.
+
+         The union allows for the 'un-declaration' of xml:lang with
+         the empty string.</xs:documentation>
+  </xs:annotation>
+  <xs:simpleType>
+   <xs:union memberTypes="xs:language">
+    <xs:simpleType>    
+     <xs:restriction base="xs:string">
+      <xs:enumeration value=""/>
+     </xs:restriction>
+    </xs:simpleType>
+   </xs:union>
+  </xs:simpleType>
+ </xs:attribute>
+
+ <xs:attribute name="space">
+  <xs:simpleType>
+   <xs:restriction base="xs:NCName">
+    <xs:enumeration value="default"/>
+    <xs:enumeration value="preserve"/>
+   </xs:restriction>
+  </xs:simpleType>
+ </xs:attribute>
+
+ <xs:attribute name="base" type="xs:anyURI">
+  <xs:annotation>
+   <xs:documentation>See http://www.w3.org/TR/xmlbase/ for
+                     information about this attribute.</xs:documentation>
+  </xs:annotation>
+ </xs:attribute>
+ <xs:attribute name="id" type="xs:ID">
+  <xs:annotation>
+   <xs:documentation>See http://www.w3.org/TR/xml-id/ for
+                     information about this attribute.</xs:documentation>
+  </xs:annotation>
+ </xs:attribute>
+
+ <xs:attributeGroup name="specialAttrs">
+  <xs:attribute ref="xml:base"/>
+  <xs:attribute ref="xml:lang"/>
+  <xs:attribute ref="xml:space"/>
+ </xs:attributeGroup>
+
+</xs:schema>