]> granicus.if.org Git - php/commitdiff
Fixed bugs #29109 and #29236. (WSDL cache failure)
authorDmitry Stogov <dmitry@php.net>
Mon, 19 Jul 2004 13:58:10 +0000 (13:58 +0000)
committerDmitry Stogov <dmitry@php.net>
Mon, 19 Jul 2004 13:58:10 +0000 (13:58 +0000)
NEWS
ext/soap/php_sdl.c
ext/soap/tests/bugs/bug29109.phpt [new file with mode: 0644]
ext/soap/tests/bugs/bug29109.wsdl [new file with mode: 0644]
ext/soap/tests/bugs/bug29236.phpt [new file with mode: 0644]
ext/soap/tests/bugs/bug29236.wsdl [new file with mode: 0644]

diff --git a/NEWS b/NEWS
index d2c6d65b6cc36d27f334e28451dd0b57f9ceb40e..582c466a6c79326519d984344d20172627f25099 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,6 +1,8 @@
 PHP                                                                        NEWS
 |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
 ?? ??? 2004, PHP 5.1.0
+- Fixed bug #29236 (memory error when wsdl-cache is enabled). (Dmitry)
+- Fixed bug #29109 (SoapFault exception: [WSDL] Out of memory). (Dmitry)
 - Fixed bug #29061 (soap extension segfaults). (Dmitry)
 - Added zlib stream filter suport. (Sara)
 - Changed the implementation of TRUE, FALSE, and NULL from constants to
index 9865e02cdc3949172a3266233c620f25bffde8a3..d8518cb298d8b300f64773db27500248f22cdd81 100644 (file)
@@ -1459,14 +1459,12 @@ static sdlPtr get_sdl_from_cache(const char *fn, const char *uri, time_t t)
                        binding->name = sdl_deserialize_string(&in);
                        binding->location = sdl_deserialize_string(&in);
                        WSDL_CACHE_GET_1(binding->bindingType,sdlBindingType,&in);
-                       if (binding->bindingType == BINDING_SOAP) {
-                               if (*in != 0) {
-                                 sdlSoapBindingPtr soap_binding = binding->bindingAttributes = emalloc(sizeof(sdlSoapBinding));
-                                       WSDL_CACHE_GET_1(soap_binding->style,sdlEncodingStyle,&in);
-                                       WSDL_CACHE_GET_1(soap_binding->transport,sdlTransport,&in);
-                               } else {
-                                       WSDL_CACHE_SKIP(1,&in);
-                               }
+                       if (binding->bindingType == BINDING_SOAP && *in != 0) {
+                         sdlSoapBindingPtr soap_binding = binding->bindingAttributes = emalloc(sizeof(sdlSoapBinding));
+                               WSDL_CACHE_GET_1(soap_binding->style,sdlEncodingStyle,&in);
+                               WSDL_CACHE_GET_1(soap_binding->transport,sdlTransport,&in);
+                       } else {
+                               WSDL_CACHE_SKIP(1,&in);
                        }
                        bindings[i] = binding;
                }
@@ -1490,18 +1488,16 @@ static sdlPtr get_sdl_from_cache(const char *fn, const char *uri, time_t t)
                } else {
                        func->binding = bindings[binding_num-1];
                }
-               if (func->binding && func->binding->bindingType == BINDING_SOAP) {
-                       if (*in != 0) {
-                               sdlSoapBindingFunctionPtr binding = func->bindingAttributes = emalloc(sizeof(sdlSoapBindingFunction));
-                               memset(binding, 0, sizeof(sdlSoapBindingFunction));
-                               WSDL_CACHE_GET_1(binding->style,sdlEncodingStyle,&in);
-                               binding->soapAction = sdl_deserialize_string(&in);
-                               sdl_deserialize_soap_body(&binding->input, encoders, types, &in);
-                               sdl_deserialize_soap_body(&binding->output, encoders, types, &in);
-                       } else {
-                               WSDL_CACHE_SKIP(1, &in);
-                               func->bindingAttributes = NULL;
-                       }
+               if (func->binding && func->binding->bindingType == BINDING_SOAP && *in != 0) {
+                       sdlSoapBindingFunctionPtr binding = func->bindingAttributes = emalloc(sizeof(sdlSoapBindingFunction));
+                       memset(binding, 0, sizeof(sdlSoapBindingFunction));
+                       WSDL_CACHE_GET_1(binding->style,sdlEncodingStyle,&in);
+                       binding->soapAction = sdl_deserialize_string(&in);
+                       sdl_deserialize_soap_body(&binding->input, encoders, types, &in);
+                       sdl_deserialize_soap_body(&binding->output, encoders, types, &in);
+               } else {
+                       WSDL_CACHE_SKIP(1, &in);
+                       func->bindingAttributes = NULL;
                }
 
                func->requestParameters = sdl_deserialize_parameters(encoders, types, &in);
diff --git a/ext/soap/tests/bugs/bug29109.phpt b/ext/soap/tests/bugs/bug29109.phpt
new file mode 100644 (file)
index 0000000..91d3ea2
--- /dev/null
@@ -0,0 +1,18 @@
+--TEST--
+Bug #29109 (Uncaught SoapFault exception: [WSDL] Out of memory)
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+$client = new SoapClient(dirname(__FILE__)."/bug29109.wsdl");
+var_dump($client->__getFunctions()); 
+?>
+--EXPECT--
+array(3) {
+  [0]=>
+  string(53) "HelloWorldResponse HelloWorld(HelloWorld $parameters)"
+  [1]=>
+  string(19) "string HelloWorld()"
+  [2]=>
+  string(19) "string HelloWorld()"
+}
\ No newline at end of file
diff --git a/ext/soap/tests/bugs/bug29109.wsdl b/ext/soap/tests/bugs/bug29109.wsdl
new file mode 100644 (file)
index 0000000..800cd23
--- /dev/null
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="windows-1257"?>\r
+<definitions xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"\r
+xmlns:s0="http://tempuri.org/"\r
+xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"\r
+xmlns:s="http://www.w3.org/2001/XMLSchema"\r
+xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"\r
+xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/"\r
+xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" name="test"\r
+targetNamespace="http://tempuri.org/"\r
+xmlns="http://schemas.xmlsoap.org/wsdl/">\r
+  <types>\r
+    <xs:schema elementFormDefault="qualified"\r
+targetNamespace="http://tempuri.org/"\r
+xmlns:xs="http://www.w3.org/2001/XMLSchema">\r
+      <xs:element name="HelloWorld">\r
+        <xs:complexType />\r
+      </xs:element>\r
+      <xs:element name="HelloWorldResponse">\r
+        <xs:complexType>\r
+          <xs:sequence>\r
+\r
+            <xs:element minOccurs="0" maxOccurs="1"\r
+name="HelloWorldResult" type="xs:string" />\r
+          </xs:sequence>\r
+        </xs:complexType>\r
+      </xs:element>\r
+      <xs:element name="string" type="xs:string" />\r
+    </xs:schema>\r
+  </types>\r
+  <message name="HelloWorldSoapIn">\r
+    <part name="parameters" element="s0:HelloWorld" />\r
+\r
+  </message>\r
+  <message name="HelloWorldSoapOut">\r
+    <part name="parameters" element="s0:HelloWorldResponse" />\r
+  </message>\r
+  <message name="HelloWorldHttpGetIn" />\r
+  <message name="HelloWorldHttpGetOut">\r
+    <part name="Body" element="s0:string" />\r
+  </message>\r
+  <message name="HelloWorldHttpPostIn" />\r
+\r
+  <message name="HelloWorldHttpPostOut">\r
+    <part name="Body" element="s0:string" />\r
+  </message>\r
+  <portType name="testSoap">\r
+    <operation name="HelloWorld">\r
+      <input message="s0:HelloWorldSoapIn" />\r
+      <output message="s0:HelloWorldSoapOut" />\r
+    </operation>\r
+  </portType>\r
+\r
+  <portType name="testHttpGet">\r
+    <operation name="HelloWorld">\r
+      <input message="s0:HelloWorldHttpGetIn" />\r
+      <output message="s0:HelloWorldHttpGetOut" />\r
+    </operation>\r
+  </portType>\r
+  <portType name="testHttpPost">\r
+    <operation name="HelloWorld">\r
+      <input message="s0:HelloWorldHttpPostIn" />\r
+\r
+      <output message="s0:HelloWorldHttpPostOut" />\r
+    </operation>\r
+  </portType>\r
+  <binding name="testSoap" type="s0:testSoap">\r
+    <soap:binding style="document"\r
+transport="http://schemas.xmlsoap.org/soap/http" />\r
+    <operation name="HelloWorld">\r
+      <soap:operation soapAction="http://tempuri.org/HelloWorld"\r
+style="document" />\r
+      <input>\r
+        <soap:body use="literal" />\r
+\r
+      </input>\r
+      <output>\r
+        <soap:body use="literal" />\r
+      </output>\r
+    </operation>\r
+  </binding>\r
+  <binding name="testHttpGet" type="s0:testHttpGet">\r
+    <http:binding verb="GET" />\r
+    <operation name="HelloWorld">\r
+\r
+      <http:operation location="/HelloWorld" />\r
+      <input>\r
+        <http:urlEncoded />\r
+      </input>\r
+      <output>\r
+        <mime:mimeXml part="Body" />\r
+      </output>\r
+    </operation>\r
+  </binding>\r
+\r
+  <binding name="testHttpPost" type="s0:testHttpPost">\r
+    <http:binding verb="POST" />\r
+    <operation name="HelloWorld">\r
+      <http:operation location="/HelloWorld" />\r
+      <input>\r
+        <mime:content part="" type="application/x-www-form-urlencoded"\r
+/>\r
+      </input>\r
+      <output>\r
+        <mime:mimeXml part="Body" />\r
+\r
+      </output>\r
+    </operation>\r
+  </binding>\r
+  <service name="test">\r
+    <port name="testSoap" binding="s0:testSoap">\r
+      <soap:address location="http://localhost:81/test.asmx" />\r
+    </port>\r
+    <port name="testHttpGet" binding="s0:testHttpGet">\r
+      <http:address location="http://localhost:81/test.asmx" />\r
+\r
+    </port>\r
+    <port name="testHttpPost" binding="s0:testHttpPost">\r
+      <http:address location="http://localhost:81/test.asmx" />\r
+    </port>\r
+  </service>\r
+</definitions>\r
diff --git a/ext/soap/tests/bugs/bug29236.phpt b/ext/soap/tests/bugs/bug29236.phpt
new file mode 100644 (file)
index 0000000..372449f
--- /dev/null
@@ -0,0 +1,20 @@
+--TEST--
+Bug #29236 (memory error when wsdl-cache is enabled)
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?
+$client = new SoapClient(dirname(__FILE__)."/bug29236.wsdl");
+var_dump($client->__getFunctions()); 
+?>
+--EXPECT--
+array(4) {
+  [0]=>
+  string(59) "StartSessionResponse StartSession(StartSession $parameters)"
+  [1]=>
+  string(62) "VerifySessionResponse VerifySession(VerifySession $parameters)"
+  [2]=>
+  string(41) "LogoutResponse Logout(Logout $parameters)"
+  [3]=>
+  string(62) "GetSystemInfoResponse GetSystemInfo(GetSystemInfo $parameters)"
+}
\ No newline at end of file
diff --git a/ext/soap/tests/bugs/bug29236.wsdl b/ext/soap/tests/bugs/bug29236.wsdl
new file mode 100644 (file)
index 0000000..d60a487
--- /dev/null
@@ -0,0 +1,287 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<definitions xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:s0="http://isis.ais.ucla.edu/ws/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" targetNamespace="http://isis.ais.ucla.edu/ws/" xmlns="http://schemas.xmlsoap.org/wsdl/">\r
+  <types>\r
+    <s:schema elementFormDefault="qualified" targetNamespace="http://isis.ais.ucla.edu/ws/">\r
+      <s:element name="StartSession">\r
+        <s:complexType>\r
+          <s:sequence>\r
+            <s:element minOccurs="0" maxOccurs="1" name="uclaId" type="s:string" />\r
+            <s:element minOccurs="0" maxOccurs="1" name="userIpAddr" type="s:string" />\r
+          </s:sequence>\r
+        </s:complexType>\r
+      </s:element>\r
+      <s:element name="StartSessionResponse">\r
+        <s:complexType>\r
+          <s:sequence>\r
+            <s:element minOccurs="1" maxOccurs="1" name="iwsResponse" nillable="true" type="s0:IwsResponse" />\r
+          </s:sequence>\r
+        </s:complexType>\r
+      </s:element>\r
+      <s:complexType name="IwsResponse">\r
+        <s:sequence>\r
+          <s:element minOccurs="1" maxOccurs="1" name="sessionInfo" nillable="true" type="s0:IwsSession" />\r
+          <s:element minOccurs="1" maxOccurs="1" name="errorInfo" nillable="true" type="s0:IwsErrorCollection" />\r
+        </s:sequence>\r
+        <s:attribute name="action" type="s0:ActionEnum" />\r
+        <s:attribute name="hasErrors" type="s:boolean" />\r
+        <s:attribute name="transactionId" type="s:long" />\r
+      </s:complexType>\r
+      <s:complexType name="IwsSession">\r
+        <s:sequence>\r
+          <s:element minOccurs="0" maxOccurs="1" name="userAttributes" type="s0:ArrayOfIwsUserAttribute" />\r
+          <s:element minOccurs="0" maxOccurs="1" name="accounts" type="s0:ArrayOfIwsAccount" />\r
+          <s:element minOccurs="1" maxOccurs="1" name="ticket" nillable="true" type="s:string" />\r
+          <s:element minOccurs="1" maxOccurs="1" name="uclaId" nillable="true" type="s:string" />\r
+        </s:sequence>\r
+        <s:attribute name="status" type="s0:SessionStatus" />\r
+      </s:complexType>\r
+      <s:complexType name="ArrayOfIwsUserAttribute">\r
+        <s:sequence>\r
+          <s:element minOccurs="0" maxOccurs="unbounded" name="attribute" type="s0:IwsUserAttribute" />\r
+        </s:sequence>\r
+      </s:complexType>\r
+      <s:complexType name="IwsUserAttribute">\r
+        <s:attribute name="name" type="s:string" />\r
+        <s:attribute name="value" type="s:string" />\r
+      </s:complexType>\r
+      <s:complexType name="ArrayOfIwsAccount">\r
+        <s:sequence>\r
+          <s:element minOccurs="0" maxOccurs="unbounded" name="account" type="s0:IwsAccount" />\r
+        </s:sequence>\r
+      </s:complexType>\r
+      <s:complexType name="IwsAccount">\r
+        <s:attribute name="loginId" type="s:string" />\r
+        <s:attribute name="type" type="s0:LoginType" />\r
+        <s:attribute name="status" type="s0:AccountStatus" />\r
+      </s:complexType>\r
+      <s:simpleType name="LoginType">\r
+        <s:restriction base="s:string">\r
+          <s:enumeration value="BruinOnline" />\r
+          <s:enumeration value="ACF2" />\r
+          <s:enumeration value="QDB" />\r
+          <s:enumeration value="UID" />\r
+          <s:enumeration value="CommonLogon" />\r
+          <s:enumeration value="RACF" />\r
+        </s:restriction>\r
+      </s:simpleType>\r
+      <s:simpleType name="AccountStatus">\r
+        <s:restriction base="s:string">\r
+          <s:enumeration value="Unknown" />\r
+          <s:enumeration value="Active" />\r
+          <s:enumeration value="Authenticated" />\r
+          <s:enumeration value="AuthenticatedWithCachedCredential" />\r
+          <s:enumeration value="NotAuthenticated" />\r
+          <s:enumeration value="PermmanentlySuspended" />\r
+          <s:enumeration value="TemporarilySuspended" />\r
+          <s:enumeration value="PasswordResetRequired" />\r
+          <s:enumeration value="InvalidID" />\r
+        </s:restriction>\r
+      </s:simpleType>\r
+      <s:simpleType name="SessionStatus">\r
+        <s:restriction base="s:string">\r
+          <s:enumeration value="Uninitialized" />\r
+          <s:enumeration value="Active" />\r
+          <s:enumeration value="ActiveWithCachedCredential" />\r
+          <s:enumeration value="ActiveWithMultipleCredentials" />\r
+          <s:enumeration value="Expired" />\r
+        </s:restriction>\r
+      </s:simpleType>\r
+      <s:complexType name="IwsErrorCollection">\r
+        <s:sequence>\r
+          <s:element minOccurs="0" maxOccurs="1" name="errors" type="s0:ArrayOfIwsError" />\r
+        </s:sequence>\r
+        <s:attribute name="count" type="s:int" />\r
+      </s:complexType>\r
+      <s:complexType name="ArrayOfIwsError">\r
+        <s:sequence>\r
+          <s:element minOccurs="0" maxOccurs="unbounded" name="error" type="s0:IwsError" />\r
+        </s:sequence>\r
+      </s:complexType>\r
+      <s:complexType name="IwsError">\r
+        <s:attribute name="errorCode" type="s:int" />\r
+        <s:attribute name="detail" type="s:string" />\r
+      </s:complexType>\r
+      <s:simpleType name="ActionEnum">\r
+        <s:restriction base="s:string">\r
+          <s:enumeration value="GetInfo" />\r
+          <s:enumeration value="Start" />\r
+          <s:enumeration value="Verify" />\r
+          <s:enumeration value="Logout" />\r
+        </s:restriction>\r
+      </s:simpleType>\r
+      <s:element name="wsConsumerCredential" type="s0:WsConsumerCredential" />\r
+      <s:complexType name="WsConsumerCredential">\r
+        <s:sequence>\r
+          <s:element minOccurs="0" maxOccurs="1" name="id" type="s:string" />\r
+          <s:element minOccurs="0" maxOccurs="1" name="password" type="s:string" />\r
+        </s:sequence>\r
+      </s:complexType>\r
+      <s:element name="VerifySession">\r
+        <s:complexType>\r
+          <s:sequence>\r
+            <s:element minOccurs="0" maxOccurs="1" name="ticket" type="s:string" />\r
+            <s:element minOccurs="0" maxOccurs="1" name="userIpAddr" type="s:string" />\r
+            <s:element minOccurs="1" maxOccurs="1" name="returnExtendedAttributes" type="s:boolean" />\r
+          </s:sequence>\r
+        </s:complexType>\r
+      </s:element>\r
+      <s:element name="VerifySessionResponse">\r
+        <s:complexType>\r
+          <s:sequence>\r
+            <s:element minOccurs="1" maxOccurs="1" name="iwsResponse" nillable="true" type="s0:IwsResponse" />\r
+          </s:sequence>\r
+        </s:complexType>\r
+      </s:element>\r
+      <s:element name="Logout">\r
+        <s:complexType>\r
+          <s:sequence>\r
+            <s:element minOccurs="0" maxOccurs="1" name="ticket" type="s:string" />\r
+            <s:element minOccurs="0" maxOccurs="1" name="userIpAddr" type="s:string" />\r
+          </s:sequence>\r
+        </s:complexType>\r
+      </s:element>\r
+      <s:element name="LogoutResponse">\r
+        <s:complexType>\r
+          <s:sequence>\r
+            <s:element minOccurs="1" maxOccurs="1" name="iwsResponse" nillable="true" type="s0:IwsResponse" />\r
+          </s:sequence>\r
+        </s:complexType>\r
+      </s:element>\r
+      <s:element name="GetSystemInfo">\r
+        <s:complexType />\r
+      </s:element>\r
+      <s:element name="GetSystemInfoResponse">\r
+        <s:complexType>\r
+          <s:sequence>\r
+            <s:element minOccurs="0" maxOccurs="1" name="GetSystemInfoResult" type="s0:ArrayOfIwsAttribute" />\r
+          </s:sequence>\r
+        </s:complexType>\r
+      </s:element>\r
+      <s:complexType name="ArrayOfIwsAttribute">\r
+        <s:sequence>\r
+          <s:element minOccurs="0" maxOccurs="unbounded" name="IwsAttribute" type="s0:IwsAttribute" />\r
+        </s:sequence>\r
+      </s:complexType>\r
+      <s:complexType name="IwsAttribute">\r
+        <s:attribute name="name" type="s:string" />\r
+        <s:attribute name="value" type="s:string" />\r
+      </s:complexType>\r
+    </s:schema>\r
+  </types>\r
+  <message name="StartSessionSoapIn">\r
+    <part name="parameters" element="s0:StartSession" />\r
+  </message>\r
+  <message name="StartSessionSoapOut">\r
+    <part name="parameters" element="s0:StartSessionResponse" />\r
+  </message>\r
+  <message name="StartSessionwsConsumerCredential">\r
+    <part name="wsConsumerCredential" element="s0:wsConsumerCredential" />\r
+  </message>\r
+  <message name="VerifySessionSoapIn">\r
+    <part name="parameters" element="s0:VerifySession" />\r
+  </message>\r
+  <message name="VerifySessionSoapOut">\r
+    <part name="parameters" element="s0:VerifySessionResponse" />\r
+  </message>\r
+  <message name="VerifySessionwsConsumerCredential">\r
+    <part name="wsConsumerCredential" element="s0:wsConsumerCredential" />\r
+  </message>\r
+  <message name="LogoutSoapIn">\r
+    <part name="parameters" element="s0:Logout" />\r
+  </message>\r
+  <message name="LogoutSoapOut">\r
+    <part name="parameters" element="s0:LogoutResponse" />\r
+  </message>\r
+  <message name="LogoutwsConsumerCredential">\r
+    <part name="wsConsumerCredential" element="s0:wsConsumerCredential" />\r
+  </message>\r
+  <message name="GetSystemInfoSoapIn">\r
+    <part name="parameters" element="s0:GetSystemInfo" />\r
+  </message>\r
+  <message name="GetSystemInfoSoapOut">\r
+    <part name="parameters" element="s0:GetSystemInfoResponse" />\r
+  </message>\r
+  <message name="GetSystemInfowsConsumerCredential">\r
+    <part name="wsConsumerCredential" element="s0:wsConsumerCredential" />\r
+  </message>\r
+  <portType name="IsisSoap">\r
+    <operation name="StartSession">\r
+      <input message="s0:StartSessionSoapIn" />\r
+      <output message="s0:StartSessionSoapOut" />\r
+    </operation>\r
+    <operation name="VerifySession">\r
+      <input message="s0:VerifySessionSoapIn" />\r
+      <output message="s0:VerifySessionSoapOut" />\r
+    </operation>\r
+    <operation name="Logout">\r
+      <input message="s0:LogoutSoapIn" />\r
+      <output message="s0:LogoutSoapOut" />\r
+    </operation>\r
+    <operation name="GetSystemInfo">\r
+      <input message="s0:GetSystemInfoSoapIn" />\r
+      <output message="s0:GetSystemInfoSoapOut" />\r
+    </operation>\r
+  </portType>\r
+  <portType name="IsisHttpGet" />\r
+  <portType name="IsisHttpPost" />\r
+  <binding name="IsisSoap" type="s0:IsisSoap">\r
+    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" />\r
+    <operation name="StartSession">\r
+      <soap:operation soapAction="http://isis.ais.ucla.edu/ws/StartSession" style="document" />\r
+      <input>\r
+        <soap:body use="literal" />\r
+        <soap:header d5p1:required="true" message="s0:StartSessionwsConsumerCredential" part="wsConsumerCredential" use="literal" xmlns:d5p1="http://schemas.xmlsoap.org/wsdl/" />\r
+      </input>\r
+      <output>\r
+        <soap:body use="literal" />\r
+      </output>\r
+    </operation>\r
+    <operation name="VerifySession">\r
+      <soap:operation soapAction="http://isis.ais.ucla.edu/ws/VerifySession" style="document" />\r
+      <input>\r
+        <soap:body use="literal" />\r
+        <soap:header d5p1:required="true" message="s0:VerifySessionwsConsumerCredential" part="wsConsumerCredential" use="literal" xmlns:d5p1="http://schemas.xmlsoap.org/wsdl/" />\r
+      </input>\r
+      <output>\r
+        <soap:body use="literal" />\r
+      </output>\r
+    </operation>\r
+    <operation name="Logout">\r
+      <soap:operation soapAction="http://isis.ais.ucla.edu/ws/Logout" style="document" />\r
+      <input>\r
+        <soap:body use="literal" />\r
+        <soap:header d5p1:required="true" message="s0:LogoutwsConsumerCredential" part="wsConsumerCredential" use="literal" xmlns:d5p1="http://schemas.xmlsoap.org/wsdl/" />\r
+      </input>\r
+      <output>\r
+        <soap:body use="literal" />\r
+      </output>\r
+    </operation>\r
+    <operation name="GetSystemInfo">\r
+      <soap:operation soapAction="http://isis.ais.ucla.edu/ws/GetSystemInfo" style="document" />\r
+      <input>\r
+        <soap:body use="literal" />\r
+        <soap:header d5p1:required="true" message="s0:GetSystemInfowsConsumerCredential" part="wsConsumerCredential" use="literal" xmlns:d5p1="http://schemas.xmlsoap.org/wsdl/" />\r
+      </input>\r
+      <output>\r
+        <soap:body use="literal" />\r
+      </output>\r
+    </operation>\r
+  </binding>\r
+  <binding name="IsisHttpGet" type="s0:IsisHttpGet">\r
+    <http:binding verb="GET" />\r
+  </binding>\r
+  <binding name="IsisHttpPost" type="s0:IsisHttpPost">\r
+    <http:binding verb="POST" />\r
+  </binding>\r
+  <service name="Isis">\r
+    <port name="IsisSoap" binding="s0:IsisSoap">\r
+      <soap:address location="http://isisdev1.tig.ucla.edu/iws/v4.asmx" />\r
+    </port>\r
+    <port name="IsisHttpGet" binding="s0:IsisHttpGet">\r
+      <http:address location="http://isisdev1.tig.ucla.edu/iws/v4.asmx" />\r
+    </port>\r
+    <port name="IsisHttpPost" binding="s0:IsisHttpPost">\r
+      <http:address location="http://isisdev1.tig.ucla.edu/iws/v4.asmx" />\r
+    </port>\r
+  </service>\r
+</definitions>
\ No newline at end of file