You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by na...@apache.org on 2007/02/20 07:57:02 UTC

svn commit: r509439 - in /webservices/axis/trunk/c: src/engine/client/ src/soap/ tests/auto_build/testcases/ tests/auto_build/testcases/client/cpp/ tests/auto_build/testcases/output/ tests/auto_build/testcases/tests/ tests/auto_build/testcases/wsdls/

Author: nadiramra
Date: Mon Feb 19 22:57:01 2007
New Revision: 509439

URL: http://svn.apache.org/viewvc?view=rev&rev=509439
Log:
AXISCPP-925 - one way messaging support.

Added:
    webservices/axis/trunk/c/tests/auto_build/testcases/client/cpp/OneWayOperationClient.cpp
    webservices/axis/trunk/c/tests/auto_build/testcases/output/OneWayOperation.cpp.out
    webservices/axis/trunk/c/tests/auto_build/testcases/output/OneWayOperation_ServerResponse.expected
    webservices/axis/trunk/c/tests/auto_build/testcases/tests/OneWayOperation.xml
    webservices/axis/trunk/c/tests/auto_build/testcases/wsdls/OneWayOperation.wsdl
    webservices/axis/trunk/c/tests/auto_build/testcases/wsdls/OneWayOperation.xsd
Modified:
    webservices/axis/trunk/c/src/engine/client/ClientAxisEngine.cpp
    webservices/axis/trunk/c/src/soap/SoapDeSerializer.cpp
    webservices/axis/trunk/c/src/soap/SoapDeSerializer.h
    webservices/axis/trunk/c/tests/auto_build/testcases/unitTest.list

Modified: webservices/axis/trunk/c/src/engine/client/ClientAxisEngine.cpp
URL: http://svn.apache.org/viewvc/webservices/axis/trunk/c/src/engine/client/ClientAxisEngine.cpp?view=diff&rev=509439&r1=509438&r2=509439
==============================================================================
--- webservices/axis/trunk/c/src/engine/client/ClientAxisEngine.cpp (original)
+++ webservices/axis/trunk/c/src/engine/client/ClientAxisEngine.cpp Mon Feb 19 22:57:01 2007
@@ -177,7 +177,7 @@
     enum AE_LEVEL { AE_START = 1, AE_SERH, AE_GLH, AE_TRH, AE_SERV };
     int Status = AXIS_FAIL;
     int level = AE_START;
-
+    
     do
     {
         // Invoke client side service specific request handlers
@@ -221,9 +221,6 @@
         // Get header and body only if we are expecting a response
         if (!noResponse || m_pSoap->isThereResponseData())
         {
-            // There is response data, for one-way it must be a fault.
-            noResponse = false;
-            
             // version not supported set status to fail
             int nSoapVersion = m_pDZ->getVersion ();
             if (nSoapVersion == VERSION_LAST)     
@@ -231,6 +228,13 @@
 
             m_pDZ->getHeader ();
             m_pDZ->getBody ();
+            
+            // If one-way messaging and there is response data, then it must be a fault. 
+            if (noResponse)
+            {
+                // initiate fault processing. This will result in an exception being thrown.
+                m_pDZ->initiateFault(NULL);
+            }
         }
     }
     while (0);

Modified: webservices/axis/trunk/c/src/soap/SoapDeSerializer.cpp
URL: http://svn.apache.org/viewvc/webservices/axis/trunk/c/src/soap/SoapDeSerializer.cpp?view=diff&rev=509439&r1=509438&r2=509439
==============================================================================
--- webservices/axis/trunk/c/src/soap/SoapDeSerializer.cpp (original)
+++ webservices/axis/trunk/c/src/soap/SoapDeSerializer.cpp Mon Feb 19 22:57:01 2007
@@ -429,6 +429,21 @@
     return AXIS_SUCCESS;
 }
 
+// Used for one-way message processing, to initiate a fault.
+void SoapDeSerializer::
+initiateFault (const AxisChar * pNamespace)
+{
+    // Will throw exception if failure in parser
+    if (AXIS_FAIL == getNextNode(true))
+        return;
+        
+    if (START_ELEMENT != m_pNode->m_type)
+        throw AxisSoapException (CLIENT_SOAP_SOAP_CONTENT_ERROR, "Start-element was not found.");
+
+    setStyle (DOC_LITERAL);
+    throw AxisGenException (AXISC_NODE_VALUE_MISMATCH_EXCEPTION);    
+}
+
 void *SoapDeSerializer::
 checkForFault (const AxisChar * pName, const AxisChar * pNamespace)
 {

Modified: webservices/axis/trunk/c/src/soap/SoapDeSerializer.h
URL: http://svn.apache.org/viewvc/webservices/axis/trunk/c/src/soap/SoapDeSerializer.h?view=diff&rev=509439&r1=509438&r2=509439
==============================================================================
--- webservices/axis/trunk/c/src/soap/SoapDeSerializer.h (original)
+++ webservices/axis/trunk/c/src/soap/SoapDeSerializer.h Mon Feb 19 22:57:01 2007
@@ -94,6 +94,7 @@
     bool isAnyMustUnderstandHeadersLeft();
     int AXISCALL checkMessageBody(const AxisChar* pName, const AxisChar* pNamespace);
     void* AXISCALL checkForFault(const AxisChar* pName,  const AxisChar* pNamespace);
+    void initiateFault(const AxisChar* pNamespace);
     /* to get any header blocks left in the Deserializer */
     HeaderBlock* getHeaderBlock();
     /* to add a header block to the Deserializer. Probably a handler */

Added: webservices/axis/trunk/c/tests/auto_build/testcases/client/cpp/OneWayOperationClient.cpp
URL: http://svn.apache.org/viewvc/webservices/axis/trunk/c/tests/auto_build/testcases/client/cpp/OneWayOperationClient.cpp?view=auto&rev=509439
==============================================================================
--- webservices/axis/trunk/c/tests/auto_build/testcases/client/cpp/OneWayOperationClient.cpp (added)
+++ webservices/axis/trunk/c/tests/auto_build/testcases/client/cpp/OneWayOperationClient.cpp Mon Feb 19 22:57:01 2007
@@ -0,0 +1,121 @@
+// Copyright 2003-2004 The Apache Software Foundation.
+// (c) Copyright IBM Corp. 2004, 2005 All Rights Reserved
+// 
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+// 
+//        http://www.apache.org/licenses/LICENSE-2.0
+// 
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include <iostream>
+#include "TestServicePortType.hpp"
+
+int main( int argc, char * argv[])
+{
+    const char *    pszURL = "http://localhost:9090/OneWayOperation/services/OneWayOperationImpl";
+    
+    if (argc > 1)
+        pszURL = argv[1];
+     
+    TestServicePortType pWS( pszURL, APTHTTP1_1);
+    SampleBeanBoolean pSBB;
+    SampleBeanComplex pSBC; 
+        
+    try
+    {
+        SampleBeanComplex_Array BBArrayIn;
+        SampleBeanComplex ** BBArray = NULL;                    
+        BBArrayIn.set(BBArray,0);
+        pSBB.setSampleBean(&BBArrayIn);
+        pSBB.setSampleBeanBoolean(false_);
+
+        pWS.aBeanPortTypeBase( &pSBB);  
+        cout << "Called aBeanPortTypeBase()" << endl;
+
+        SampleBeanComplex_Array BCArrayIn;
+        SampleBeanComplex ** BCArray = NULL;                    
+        BCArrayIn.set(BCArray,0);
+        
+        pSBC.setSampleBeanComplex(&BCArrayIn);
+        pSBC.setBoolean(false_);
+        pWS.aBeanPortTypeComplex( &pSBC);
+
+        cout << "Called aBeanPortTypeComplex()" << endl;
+
+        cout << "Calling aBeanPortTypeComplex() to initiate fault processing" << endl;
+        pWS.aBeanPortTypeComplex( &pSBC);
+        
+        cout << "Calling aBeanPortTypeComplex() to see everything OK after fault processing" << endl;
+        pWS.aBeanPortTypeComplex( &pSBC);
+    }
+    catch( SoapFaultException& e)
+    {
+        char *faultCode   = (char *)e.getFaultCode();
+        char *faultString = (char *)e.getFaultString();
+        char *faultActor  = (char *)e.getFaultActor();
+        
+        if (!faultCode)  faultCode = "NULL";
+        if (!faultString) faultString = "NULL";
+        if (!faultActor) faultActor = "NULL";
+        
+        cout << "  FaultCode = " << faultCode << endl;
+        cout << "  FaultString = " << faultString << endl;
+        cout << "  FaultActor = " << faultActor << endl;
+        cout << "  SoapFaultException: " << e.what() << endl;
+    }    
+    catch( AxisException& e)
+    {
+        cout <<  e.what() << endl;
+    }
+    catch( exception& e)
+    {
+        cout << "Unknown exception has occured : " << e.what() << endl;
+    }
+    catch(...)
+    {
+        cout << "Unknown exception has occured" << endl;
+    }
+
+    try
+    {
+        cout << "Calling aBeanPortTypeComplex() to see everything OK after fault processing" << endl;
+        pWS.aBeanPortTypeComplex( &pSBC);
+    }
+    catch( SoapFaultException& e)
+    {
+        char *faultCode   = (char *)e.getFaultCode();
+        char *faultString = (char *)e.getFaultString();
+        char *faultActor  = (char *)e.getFaultActor();
+        
+        if (!faultCode)  faultCode = "NULL";
+        if (!faultString) faultString = "NULL";
+        if (!faultActor) faultActor = "NULL";
+        
+        cout << "  FaultCode = " << faultCode << endl;
+        cout << "  FaultString = " << faultString << endl;
+        cout << "  FaultActor = " << faultActor << endl;
+        cout << "  SoapFaultException: " << e.what() << endl;
+    }    
+    catch( AxisException& e)
+    {
+        cout <<  e.what() << endl;
+    }
+    catch( exception& e)
+    {
+        cout << "Unknown exception has occured : " << e.what() << endl;
+    }
+    catch(...)
+    {
+        cout << "Unknown exception has occured" << endl;
+    }
+
+    cout<< "---------------------- TEST COMPLETE -----------------------------"<< endl;
+
+    return 0;
+}
\ No newline at end of file

Added: webservices/axis/trunk/c/tests/auto_build/testcases/output/OneWayOperation.cpp.out
URL: http://svn.apache.org/viewvc/webservices/axis/trunk/c/tests/auto_build/testcases/output/OneWayOperation.cpp.out?view=auto&rev=509439
==============================================================================
--- webservices/axis/trunk/c/tests/auto_build/testcases/output/OneWayOperation.cpp.out (added)
+++ webservices/axis/trunk/c/tests/auto_build/testcases/output/OneWayOperation.cpp.out Mon Feb 19 22:57:01 2007
@@ -0,0 +1,9 @@
+Called aBeanPortTypeBase()
+Called aBeanPortTypeComplex()
+Calling aBeanPortTypeComplex() to initiate fault processing
+  FaultCode = soapenv:Client
+  FaultString = OneWayOperation Client Error
+  FaultActor = NULL
+  SoapFaultException: OneWayOperation Client Error
+Calling aBeanPortTypeComplex() to see everything OK after fault processing
+---------------------- TEST COMPLETE -----------------------------
\ No newline at end of file

Added: webservices/axis/trunk/c/tests/auto_build/testcases/output/OneWayOperation_ServerResponse.expected
URL: http://svn.apache.org/viewvc/webservices/axis/trunk/c/tests/auto_build/testcases/output/OneWayOperation_ServerResponse.expected?view=auto&rev=509439
==============================================================================
--- webservices/axis/trunk/c/tests/auto_build/testcases/output/OneWayOperation_ServerResponse.expected (added)
+++ webservices/axis/trunk/c/tests/auto_build/testcases/output/OneWayOperation_ServerResponse.expected Mon Feb 19 22:57:01 2007
@@ -0,0 +1,41 @@
+HTTP/1.1 200 OK
+Server: WebSphere Application Server/5.1
+Content-Type: text/xml; charset=utf-8
+Content-Language: en-GB
+Content-Length: 0
+
+HTTP/1.1 200 OK
+Server: WebSphere Application Server/5.1
+Content-Type: text/xml; charset=utf-8
+Content-Language: en-GB
+Content-Length: 0
+
+HTTP/1.1 500 Internal Server Error
+Server: WebSphere Application Server/5.1
+Content-Type: text/xml; charset=utf-8
+Content-Language: en-GB
+Transfer-Encoding: chunked
+
+###
+<?xml version="1.0" encoding="utf-8"?>
+<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
+         xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" 
+         xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+<soapenv:Header/>
+<soapenv:Body>
+  <soapenv:Fault>
+     <faultcode>soapenv:Client</faultcode>
+     <faultstring>OneWayOperation Client Error</faultstring>
+     <detail/>
+   </soapenv:Fault>
+</soapenv:Body>
+</soapenv:Envelope>
+0
+
+HTTP/1.1 200 OK
+Server: WebSphere Application Server/5.1
+Content-Type: text/xml; charset=utf-8
+Content-Language: en-GB
+Content-Length: 0
+

Added: webservices/axis/trunk/c/tests/auto_build/testcases/tests/OneWayOperation.xml
URL: http://svn.apache.org/viewvc/webservices/axis/trunk/c/tests/auto_build/testcases/tests/OneWayOperation.xml?view=auto&rev=509439
==============================================================================
--- webservices/axis/trunk/c/tests/auto_build/testcases/tests/OneWayOperation.xml (added)
+++ webservices/axis/trunk/c/tests/auto_build/testcases/tests/OneWayOperation.xml Mon Feb 19 22:57:01 2007
@@ -0,0 +1,16 @@
+<test>
+    <name>OneWayOperation</name>
+    <description>OneWayOperation</description>
+    <clientLang>cpp</clientLang>
+    <clientCode>OneWayOperationClient.cpp</clientCode>
+    <wsdl>OneWayOperation.wsdl</wsdl>
+    <expected>
+        <serverResponse>
+            OneWayOperation_ServerResponse.expected
+        </serverResponse>
+        <output>
+            OneWayOperation.cpp.out
+        </output>
+    </expected>
+	<endpoint>http://localhost:80/axis/OneWayOperation</endpoint>
+</test>

Modified: webservices/axis/trunk/c/tests/auto_build/testcases/unitTest.list
URL: http://svn.apache.org/viewvc/webservices/axis/trunk/c/tests/auto_build/testcases/unitTest.list?view=diff&rev=509439&r1=509438&r2=509439
==============================================================================
Binary files - no diff available.

Added: webservices/axis/trunk/c/tests/auto_build/testcases/wsdls/OneWayOperation.wsdl
URL: http://svn.apache.org/viewvc/webservices/axis/trunk/c/tests/auto_build/testcases/wsdls/OneWayOperation.wsdl?view=auto&rev=509439
==============================================================================
--- webservices/axis/trunk/c/tests/auto_build/testcases/wsdls/OneWayOperation.wsdl (added)
+++ webservices/axis/trunk/c/tests/auto_build/testcases/wsdls/OneWayOperation.wsdl Mon Feb 19 22:57:01 2007
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright 2003-2004 The Apache Software Foundation.                      -->
+<!-- (c) Copyright IBM Corp. 2004, 2005 All Rights Reserved                   -->
+<!--                                                                          -->
+<!-- Licensed under the Apache License, Version 2.0 (the "License");          -->
+<!-- you may not use this file except in compliance with the License.         -->
+<!-- You may obtain a copy of the License at                                  -->
+<!--                                                                          -->
+<!--        http://www.apache.org/licenses/LICENSE-2.0                        -->
+<!--                                                                          -->
+<!-- Unless required by applicable law or agreed to in writing, software      -->
+<!-- distributed under the License is distributed on an "AS IS" BASIS,        -->
+<!-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -->
+<!-- See the License for the specific language governing permissions and      -->
+<!-- limitations under the License.                                           -->
+
+<definitions targetNamespace="OneWayOperationTest"
+                       xmlns="http://schemas.xmlsoap.org/wsdl/"
+                  xmlns:ns99="OneWayOperation"
+                  xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
+                   xmlns:tns="OneWayOperationTest"
+                   xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="XMLSchema">
+
+ <types>
+  <xsd:schema   xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+  	<xsd:import namespace="OneWayOperation"
+  	       schemaLocation="OneWayOperation.xsd"/>
+
+   <xsd:element name="anElementComplex">
+    <xsd:complexType>
+     <xsd:sequence>
+      <xsd:element maxOccurs="1" minOccurs="1" name="Element" nillable="true" type="ns99:SampleBeanComplex"/>
+     </xsd:sequence>
+    </xsd:complexType>
+   </xsd:element>
+
+   <xsd:element name="anElementBase">
+    <xsd:complexType>
+     <xsd:sequence>
+      <xsd:element maxOccurs="1" minOccurs="1" name="Element" nillable="true" type="ns99:SampleBeanBoolean"/>
+     </xsd:sequence>
+    </xsd:complexType>
+   </xsd:element>
+  </xsd:schema>
+ </types>
+
+ <message name="aBeanMessageComplex">
+ 	<part name="aBeanMesage" element="tns:anElementComplex"></part>
+ </message>
+
+ <message name="aBeanMessageBase">
+ 	<part name="aBeanMesage" element="tns:anElementBase"></part>
+ </message>
+
+ <portType name="TestServicePortType">
+  <operation name="aBeanPortTypeComplex">
+   <input message="tns:aBeanMessageComplex"/>
+  </operation>
+
+  <operation name="aBeanPortTypeBase">
+   <input message="tns:aBeanMessageBase"/>
+  </operation>
+ </portType>
+
+ <binding name="ServiceBinding" type="tns:TestServicePortType">
+  <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
+  <operation name="aBeanPortTypeComplex">
+   <soap:operation soapAction="" style="document"/>
+   <input>
+    <soap:body use="literal"/>
+   </input>
+  </operation>
+
+  <operation name="aBeanPortTypeBase">
+   <soap:operation soapAction="" style="document"/>
+   <input>
+    <soap:body use="literal"/>
+   </input>
+  </operation>
+ </binding>
+
+  <service name="SimpleService">
+    <port binding="tns:ServiceBinding" name="ServiceBinding">
+      <soap:address location="http://tempuri.org" /> 
+    </port>
+  </service>
+</definitions>
\ No newline at end of file

Added: webservices/axis/trunk/c/tests/auto_build/testcases/wsdls/OneWayOperation.xsd
URL: http://svn.apache.org/viewvc/webservices/axis/trunk/c/tests/auto_build/testcases/wsdls/OneWayOperation.xsd?view=auto&rev=509439
==============================================================================
--- webservices/axis/trunk/c/tests/auto_build/testcases/wsdls/OneWayOperation.xsd (added)
+++ webservices/axis/trunk/c/tests/auto_build/testcases/wsdls/OneWayOperation.xsd Mon Feb 19 22:57:01 2007
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<xsd:schema targetNamespace="OneWayOperation"
+            xmlns:tns="OneWayOperation"
+            xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+ 
+ <xsd:complexType name="SampleBeanComplex">
+  <xsd:sequence>
+   <xsd:element form="qualified" maxOccurs="unbounded" minOccurs="0" name="SampleBeanComplex" nillable="true"  type="tns:SampleBeanComplex"/>
+   <xsd:element form="qualified" maxOccurs="1"         minOccurs="1" name="Boolean"           nillable="false" type="xsd:boolean"/>
+  </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="SampleBeanBoolean">
+  <xsd:sequence>
+   <xsd:element form="qualified" minOccurs="0" maxOccurs="unbounded"       name="SampleBean"        nillable="true"  type="tns:SampleBeanComplex"/>
+   <xsd:element form="qualified" maxOccurs="1" minOccurs="1" name="SampleBeanBoolean" nillable="false" type="xsd:boolean"/>
+  </xsd:sequence>
+ </xsd:complexType>
+</xsd:schema>



---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org