You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by pr...@apache.org on 2005/11/30 15:40:23 UTC

svn commit: r349958 - in /webservices/axis/trunk/c: src/wsdl/org/apache/axis/wsdl/wsdl2ws/ src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/literal/ tests/auto_build/testcases/client/cpp/

Author: prestonf
Date: Wed Nov 30 06:40:14 2005
New Revision: 349958

URL: http://svn.apache.org/viewcvs?rev=349958&view=rev
Log:
Fix for AXIS_OUT_PARAM simple type parameters.

Modified:
    webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/CUtils.java
    webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/literal/ClientStubHeaderWriter.java
    webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/literal/ClientStubWriter.java
    webservices/axis/trunk/c/tests/auto_build/testcases/client/cpp/InOutClient.cpp
    webservices/axis/trunk/c/tests/auto_build/testcases/client/cpp/MultiOutClient.cpp
    webservices/axis/trunk/c/tests/auto_build/testcases/client/cpp/SimpleChoiceNillableClient.cpp

Modified: webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/CUtils.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/CUtils.java?rev=349958&r1=349957&r2=349958&view=diff
==============================================================================
--- webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/CUtils.java (original)
+++ webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/CUtils.java Wed Nov 30 06:40:14 2005
@@ -804,9 +804,17 @@
 	} 
 	public static boolean isPointerType(String name)
 	{
-		return ((Boolean) isPointerBasedType.get(name)).booleanValue();
-	}
+		Object o = isPointerBasedType.get(name);
+		boolean	b = false;
+		
+		if( o != null)
+		{
+		    b = ((Boolean) isPointerBasedType.get(name)).booleanValue();
+		}
 		
+		return b;
+	}
+	
 	public static boolean isAnyType(QName name){
 			return name.equals(anyTypeQname);
 	}

Modified: webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/literal/ClientStubHeaderWriter.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/literal/ClientStubHeaderWriter.java?rev=349958&r1=349957&r2=349958&view=diff
==============================================================================
--- webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/literal/ClientStubHeaderWriter.java (original)
+++ webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/literal/ClientStubHeaderWriter.java Wed Nov 30 06:40:14 2005
@@ -138,15 +138,30 @@
                     {
                         ParameterInfo nparam = (ParameterInfo) params.next();
                         String comma = ", ";
-                        if (!hasInputParms && 0==j) comma = "";
+                        String paramType = WrapperUtils.getClassNameFromParamInfoConsideringArrays( nparam, wscontext);
+                        boolean bTypeHasStar = paramType.endsWith( "*");
+                        
+                        if (!hasInputParms && 0==j)
+                            {
+                            comma = "";
+                            }
+                        
+                        if( CUtils.isPointerType( paramType) || bTypeHasStar)
+                        {
                         writer.write(comma
                                 + "AXIS_OUT_PARAM "
-                                + WrapperUtils
-                                    .getClassNameFromParamInfoConsideringArrays(
-                                    nparam,
-                                    wscontext)
-                                + " *OutValue"
+                                + paramType
+                                + " * OutValue"
                                 + j);
+                        }
+                        else
+                        {
+                            writer.write(comma
+                                    + "AXIS_OUT_PARAM "
+                                    + paramType
+                                    + " ** OutValue"
+                                    + j);
+                        }
                     }
                 }
                 writer.write(");\n");

Modified: webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/literal/ClientStubWriter.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/literal/ClientStubWriter.java?rev=349958&r1=349957&r2=349958&view=diff
==============================================================================
--- webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/literal/ClientStubWriter.java (original)
+++ webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/literal/ClientStubWriter.java Wed Nov 30 06:40:14 2005
@@ -359,22 +359,36 @@
 	{
 	    for (int i = 0; i < paramsC.size (); i++)
 	    {
-		type =
+	        type =
 		    wscontext.getTypemap ().getType (((ParameterInfo) paramsC.
 						      get (i)).
 						     getSchemaName ());
             String comma = ", ";
-            if (paramsB.size()==0 && 0==i) comma = "";
-		writer.write (comma + "AXIS_OUT_PARAM  " +
-			      WrapperUtils.
-			      getClassNameFromParamInfoConsideringArrays ((ParameterInfo) paramsC.get (i), wscontext) + "* OutValue" + i);
+            if (paramsB.size()==0 && 0==i)
+                {
+                comma = "";
+                }
+            
+            String	xsdType = WrapperUtils.getClassNameFromParamInfoConsideringArrays ((ParameterInfo) paramsC.get (i), wscontext);
+            
+            if( CUtils.isPointerType( xsdType) || xsdType.endsWith( "*"))
+            {
+        		writer.write (comma + "AXIS_OUT_PARAM  " + xsdType + " * OutValue" + i);
+            }
+            else
+            {
+        		writer.write (comma + "AXIS_OUT_PARAM  " + xsdType + " ** OutValue" + i);
+            }
+
 	    }
 	}
 
 	writer.write (")\n{\n");
+	
 	if (returntype != null)
 	{
 	    writer.write ("\t");
+	    
 	    if (returntypeisarray)
 	    {
 	        //for arrays
@@ -382,7 +396,6 @@
 	    }
 	    else
 	    {
-
 		if (!returntypeissimple)
 		{		//for AnyType too
 		    if (outparamType.lastIndexOf ("*") > 0)
@@ -825,24 +838,78 @@
 
 		    if (typeissimple)
 		    {
-			if (CUtils.isPointerType(currentParaType))
-			{
-				writer.write ("\t\t\t"
-				      + currentParamName
-				      + " = m_pCall->"
-				      + CUtils.getParameterGetValueMethodName(currentParaType,false) 
-					+ "(\"" + currentType.getParamName () 
-					+ "\", 0);\n");
-			}
-			else 
-			{
-				writer.write ("\t\t\t"
-				      + currentParamName
-				      + " = *(m_pCall->"
-				      + CUtils.getParameterGetValueMethodName(currentParaType,false) 
-					+ "(\"" + currentType.getParamName () 
-					+ "\", 0));\n");
-			}
+		        if( i > 0)
+		        {
+				    writer.write( "\n");
+		        }
+		        
+				if (CUtils.isPointerType(currentParaType))
+				{
+/*					writer.write ("\t\t\t"
+					      + currentParamName
+					      + " = m_pCall->"
+					      + CUtils.getParameterGetValueMethodName(currentParaType,false) 
+						+ "(\"" + currentType.getParamName () 
+						+ "\", 0);\n");
+*/
+				    String xsdType =  WrapperUtils.getClassNameFromParamInfoConsideringArrays ((ParameterInfo) paramsC.get (i), wscontext);
+				    
+				    if( !CUtils.isPointerType(xsdType))
+				    {
+				        xsdType += " *";
+				    }
+				    
+				    writer.write( "\t\t\t" + currentParaType + " pReturn" + i + " = m_pCall->" + CUtils.getParameterGetValueMethodName( currentParaType, false) + "( \"" + currentType.getParamName() + "\", 0);\n");
+				    writer.write( "\n");
+				    writer.write( "\t\t\tif( OutValue" + i + " != NULL)\n");
+				    writer.write( "\t\t\t\t{\n");
+				    writer.write( "\t\t\t\tif( *OutValue" + i + " != NULL)\n");
+				    writer.write( "\t\t\t\t{\n");
+				    writer.write( "\t\t\t\t\tint\tiStringSize" + i + " = strlen( (char *) *OutValue" + i + ");\n");
+				    writer.write( "\t\t\t\t\tint\tiStrLenValue" + i + " = strlen( pReturn" + i + ");\n");
+				    writer.write( "\n");
+				    writer.write( "\t\t\t\t\tif( iStrLenValue" + i + " > iStringSize" + i + ")\n");
+				    writer.write( "\t\t\t\t\t{\n");
+				    writer.write( "\t\t\t\t\t\t*OutValue" + i + " =(" + xsdType + ") new char[iStrLenValue" + i + " + 1];\n");
+				    writer.write( "\t\t\t\t\t\tstrcpy( (char *) *OutValue" + i + ", pReturn" + i + ");\n");
+				    writer.write( "\t\t\t\t\t}\n");
+				    writer.write( "\t\t\t\t\telse\n");
+				    writer.write( "\t\t\t\t\t{\n");
+				    writer.write( "\t\t\t\t\t\tstrcpy( (char *) *OutValue" + i + ", pReturn" + i + ");\n");
+				    writer.write( "\t\t\t\t\t}\n");
+				    writer.write( "\t\t\t\t}\n");
+				    writer.write( "\t\t\t\telse\n");
+				    writer.write( "\t\t\t\t{\n");
+				    writer.write( "\t\t\t\t\t*OutValue" + i + " = (" + xsdType + ") new char[strlen( pReturn" + i + ") + 1];\n");
+				    writer.write( "\t\t\t\t\tstrcpy( (char *) *OutValue" + i + ", pReturn" + i + ");\n");
+				    writer.write( "\t\t\t\t}\n");
+				    writer.write( "\t\t\t}\n");
+				    writer.write( "\n");
+				    writer.write( "\t\t\tAxis::AxisDelete( (void *) pReturn" + i + ", " + CUtils.getXSDTypeForBasicType( currentParaType) + ");\n");
+				}
+				else 
+				{
+/*					writer.write ("\t\t\t"
+					      + currentParamName
+					      + " = *(m_pCall->"
+					      + CUtils.getParameterGetValueMethodName(currentParaType,false) 
+						+ "(\"" + currentType.getParamName () 
+						+ "\", 0));\n");
+*/
+				    writer.write( "\t\t\t" + currentParaType + " * pReturn" + i + " = m_pCall->" + CUtils.getParameterGetValueMethodName( currentParaType, false) + "( \"" + currentType.getParamName() + "\", 0);\n");
+				    writer.write( "\n");
+				    writer.write( "\t\t\tif( OutValue" + i + " != NULL)\n");
+				    writer.write( "\t\t\t{\n");
+				    writer.write( "\t\t\t\tif( *OutValue" + i + " == NULL)\n");
+				    writer.write( "\t\t\t\t{\n");
+				    writer.write( "\t\t\t\t\t*OutValue" + i + " = new " + currentParaType + "();\n");
+				    writer.write( "\t\t\t\t}\n");
+				    writer.write( "\n");
+				    writer.write( "\t\t\t**OutValue" + i + " = *pReturn" + i + ";\n");
+				    writer.write( "\t\t\t}\n");
+				    writer.write( "\n");
+				    writer.write( "\t\t\tAxis::AxisDelete( (void *) pReturn" + i + ", " + CUtils.getXSDTypeForBasicType( currentParaType) + ");\n");
+				}
 		    }
 		    else
 		    {

Modified: webservices/axis/trunk/c/tests/auto_build/testcases/client/cpp/InOutClient.cpp
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/c/tests/auto_build/testcases/client/cpp/InOutClient.cpp?rev=349958&r1=349957&r2=349958&view=diff
==============================================================================
--- webservices/axis/trunk/c/tests/auto_build/testcases/client/cpp/InOutClient.cpp (original)
+++ webservices/axis/trunk/c/tests/auto_build/testcases/client/cpp/InOutClient.cpp Wed Nov 30 06:40:14 2005
@@ -73,12 +73,16 @@
 		
 		// test multiParametersMultiReturn
 		xsd__string outValue0 = "";
-		xsd__int outValue1 = 0;
-		xsd__double outValue2 = 0;
+		xsd__int * pOutValue1 = 0;
+		xsd__double * pOutValue2 = 0;
 		
 		cout << "multiParametersMultiReturn" << endl;
-		ws.multiParametersMultiReturn("Hey dude", 69, (xsd__double)17.19, &outValue0, &outValue1, &outValue2);
-		cout << "multiParametersMultiReturn returned " << outValue0 << " , " << outValue1 << " , " << outValue2 <<endl;
+		ws.multiParametersMultiReturn("Hey dude", 69, (xsd__double)17.19, &outValue0, &pOutValue1, &pOutValue2);
+		cout << "multiParametersMultiReturn returned " << outValue0 << " , " << *pOutValue1 << " , " << *pOutValue2 <<endl;
+
+		delete pOutValue1;
+		delete pOutValue2;
+
 		//...........................................................
 
         xsd__int ** arrayOfInt = new xsd__int*[3];
@@ -108,13 +112,16 @@
 
 		xsd__string OutValue0 = "";
 		ComplexType1* OutValue1;
-		xsd__int OutValue2 = 0;
-		xsd__double OutValue3 = 0;
+		xsd__int * pOutValue22 = 0;
+		xsd__double * pOutValue33 = 0;
 
 		cout << "multiComplexParametersMultiComplexReturn" << endl;
-		ws.multiComplexParametersMultiComplexReturn("Hello", &ct, 27, 13.31, &stringArray, &OutValue0, &OutValue1, &OutValue2, &OutValue3);
+		ws.multiComplexParametersMultiComplexReturn("Hello", &ct, 27, 13.31, &stringArray, &OutValue0, &OutValue1, &pOutValue22, &pOutValue33);
 		cout << "multiComplexParametersMultiComplexReturn returned " << OutValue0 << " , " << OutValue1->ctString << endl;
 
+		delete pOutValue22;
+		delete pOutValue33;
+
 		//..............................................................................
 		
 		
@@ -190,7 +197,8 @@
 		ctr = ws.complexParameterComplexReturn(&ct2);
 		cout << "complexParameterComplexReturn with nil parameters returned " << ctr->ctLong << endl;
 
-
+		delete pOutValue1;
+		delete pOutValue2;
 	}
 	catch(AxisException& e)
 	{
@@ -198,7 +206,7 @@
 	}
 	catch(exception& e)
 	{
-	    cout << "Unknown exception has occured" << endl;
+		cout << "Unknown exception has occured : " << e.what() << endl;
 	}
 	catch(...)
 	{

Modified: webservices/axis/trunk/c/tests/auto_build/testcases/client/cpp/MultiOutClient.cpp
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/c/tests/auto_build/testcases/client/cpp/MultiOutClient.cpp?rev=349958&r1=349957&r2=349958&view=diff
==============================================================================
--- webservices/axis/trunk/c/tests/auto_build/testcases/client/cpp/MultiOutClient.cpp (original)
+++ webservices/axis/trunk/c/tests/auto_build/testcases/client/cpp/MultiOutClient.cpp Wed Nov 30 06:40:14 2005
@@ -40,15 +40,15 @@
 			xsd__byte OutValue9 = 0;
 
 			ws.get(&OutValue0,
-				&OutValue1,
-				&OutValue2,
-				&OutValue3,
-				&OutValue4,
-				&OutValue5,
-				&OutValue6,
-				&OutValue7,
-				&OutValue8,
-				&OutValue9);
+				(xsd__integer**)&OutValue1,
+				(xsd__int**)&OutValue2,
+				(xsd__long**)&OutValue3,
+				(xsd__short**)&OutValue4,
+				(xsd__decimal**)&OutValue5,
+				(xsd__float**)&OutValue6,
+				(xsd__double**)&OutValue7,
+				(xsd__boolean**)&OutValue8,
+				(xsd__byte**)&OutValue9);
 
 			char sInteger[128], sLong[128];
 #ifdef WIN32

Modified: webservices/axis/trunk/c/tests/auto_build/testcases/client/cpp/SimpleChoiceNillableClient.cpp
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/c/tests/auto_build/testcases/client/cpp/SimpleChoiceNillableClient.cpp?rev=349958&r1=349957&r2=349958&view=diff
==============================================================================
--- webservices/axis/trunk/c/tests/auto_build/testcases/client/cpp/SimpleChoiceNillableClient.cpp (original)
+++ webservices/axis/trunk/c/tests/auto_build/testcases/client/cpp/SimpleChoiceNillableClient.cpp Wed Nov 30 06:40:14 2005
@@ -1,4 +1,4 @@
-#include <iostream.h>
+#include <iostream>
 #include "ChoiceTestSoap.hpp"
 
 using namespace std;