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 du...@apache.org on 2005/12/06 06:35:24 UTC

svn commit: r354322 - in /webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp: BeanParamWriter.java ClientStubHeaderWriter.java ClientStubWriter.java WrapWriter.java

Author: dushshantha
Date: Mon Dec  5 21:35:12 2005
New Revision: 354322

URL: http://svn.apache.org/viewcvs?rev=354322&view=rev
Log:
Made the modifications to the code generation for RPC style wsdls to suit the new memory model of Arrays.

Modified:
    webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/BeanParamWriter.java
    webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/ClientStubHeaderWriter.java
    webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/ClientStubWriter.java
    webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/WrapWriter.java

Modified: webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/BeanParamWriter.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/BeanParamWriter.java?rev=354322&r1=354321&r2=354322&view=diff
==============================================================================
--- webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/BeanParamWriter.java (original)
+++ webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/BeanParamWriter.java Mon Dec  5 21:35:12 2005
@@ -521,6 +521,8 @@
 
 	private void writeDeSerializeGlobalMethod() throws IOException, WrapperFault 
     {
+		int arrayCount = 0;
+		
 		writer.write("/*\n");
 		writer.write(" * This static method deserialize a " + classname
 				+ " type of object\n");
@@ -610,15 +612,18 @@
 				//if Array
 				if (attribs[i].isSimpleType()) 
                 {
-					writer.write("\tparam->"
-							+ attribs[i].getParamNameAsMember()
-							+ " = ("
-							+ CUtils.getBasicArrayNameforType(attribs[i]
-									.getTypeName())
-							+ "&)pIWSDZ->getBasicArray("
-							+ CUtils.getXSDTypeForBasicType(attribs[i]
-									.getTypeName()) + ", \""
-							+ attribs[i].getParamName() + "\",0);\n");
+					//new array memory model.					
+					 writer.write("\tAxis_Array * array" + arrayCount + " = pIWSDZ->getBasicArray("
+	                            + CUtils.getXSDTypeForBasicType(attribs[i].getTypeName()) + ", \""
+	                            + attribs[i].getParamNameAsSOAPElement()
+	                            + "\",0);\n");
+	                    writer.write("\tif(param->" + attribs[i].getParamNameAsMember() + " == NULL)\n");
+	                    writer.write("\t{\n");
+	                    writer.write("\t\tparam->" + attribs[i].getParamNameAsMember() + " = new " + attribs[i].getTypeName() + "_Array();\n");
+	                    writer.write("\t}\n");
+	                    writer.write("\tparam->" + attribs[i].getParamNameAsMember() + "->clone( *array" + arrayCount + ");\n");
+	                    writer.write("\tAxis::AxisDelete((void*) array" + arrayCount + ", XSD_ARRAY);\n\n");
+	                    //end of new array memory model.
 				} 
                 else 
                 {
@@ -628,17 +633,27 @@
 						elm = attribs[i].getTypeName();
 					}
 					arrayType = attribs[i].getTypeName();
-					writer.write("\tparam->"
-									+ attribs[i].getParamNameAsMember()
-									+ " = ("
-									+ attribs[i].getTypeName()
-									+ "_Array&)pIWSDZ->getCmplxArray((void*)Axis_DeSerialize_"
-									+ arrayType + "\n\t\t, (void*)Axis_Create_"
-									+ arrayType + ", (void*)Axis_Delete_"
-									+ arrayType
-									+ "\n\t\t, (void*)Axis_GetSize_"
-									+ arrayType + ", \"" + elm
-									+ "\", Axis_URI_" + arrayType + ");\n");
+					
+					//new array memory model.
+					writer.write("\t" + arrayType + "_Array * array" + arrayCount + " = new " + arrayType + "_Array();\n");
+                    writer.write("\tarray" + arrayCount + " = (" + arrayType + "_Array *) pIWSDZ->getCmplxArray(array" + arrayCount + ", (void*)Axis_DeSerialize_"
+                                    + arrayType
+                                    + ",\n"
+                                    + "\t\t\t\t\t\t\t\t  (void*)Axis_Create_"
+                                    + arrayType
+                                    + ",\n"
+                                    + "\t\t\t\t\t\t\t\t  (void*)Axis_Delete_"
+                                    + arrayType
+                                    + ",\n"
+                                    + "\t\t\t\t\t\t\t\t  (void*)Axis_GetSize_"
+                                    + arrayType
+                                    + ",\n"
+                                    + "\t\t\t\t\t\t\t\t  \""
+                                    + attribs[i].getElementNameAsString()
+                                    + "\", Axis_URI_" + arrayType + ");\n\n");
+                    
+                	writer.write("\tparam->" + attribs[i].getParamNameAsMember() + " = array" + arrayCount + ";\n\n");
+                	//end of new array memory model.
 				}
 			} 
             else if (attribs[i].isSimpleType()) 

Modified: webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/ClientStubHeaderWriter.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/ClientStubHeaderWriter.java?rev=354322&r1=354321&r2=354322&view=diff
==============================================================================
--- webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/ClientStubHeaderWriter.java (original)
+++ webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/ClientStubHeaderWriter.java Mon Dec  5 21:35:12 2005
@@ -134,19 +134,21 @@
                                 .iterator()
                                 .next();
                         String outParamTypeName = WrapperUtils.getClassNameFromParamInfoConsideringArrays(returnParam, wscontext);
-                        if (CUtils.isSimpleType(outParamTypeName)
-								&& returnParam.isNillable()
-								&& !(CUtils.isPointerType(outParamTypeName)))
+                        if ((outParamTypeName.lastIndexOf ("_Array") > 0)
+                        		||(CUtils.isSimpleType(outParamTypeName)
+								&& (returnParam.isNillable() || returnParam.isOptional())
+								&& !(CUtils.isPointerType(outParamTypeName))))
                         {
                         	writer.write(
                                     "\tSTORAGE_CLASS_INFO "
                                         + outParamTypeName
                                         + " * ");
                         }
-                        writer.write(
-                            "\tSTORAGE_CLASS_INFO "
-                                + outParamTypeName
-                                + " ");
+                        else
+                        	writer.write(
+                        			"\tSTORAGE_CLASS_INFO "
+                        			+ outParamTypeName
+                        			+ " ");
                     }
                     else
                     {
@@ -166,14 +168,16 @@
                     .getClassNameFromParamInfoConsideringArrays(
                             fparam,
                             wscontext);
-                    if (CUtils.isSimpleType(paramTypeName)
+                    if ((paramTypeName.lastIndexOf ("_Array") > 0)
+                    		||(CUtils.isSimpleType(paramTypeName)
 							&& fparam.isNillable()
-							&& !(CUtils.isPointerType(paramTypeName)))
+							&& !(CUtils.isPointerType(paramTypeName))))
                     {
                     	writer.write(
     	                        paramTypeName
     	                            + " * Value"
     	                            + 0);
+                    	System.out.println("Case 2");
                     }
                     else
                     {

Modified: webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/ClientStubWriter.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/ClientStubWriter.java?rev=354322&r1=354321&r2=354322&view=diff
==============================================================================
--- webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/ClientStubWriter.java (original)
+++ webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/ClientStubWriter.java Mon Dec  5 21:35:12 2005
@@ -165,6 +165,8 @@
                         + CUtils.CPP_HEADER_SUFFIX + "\"\n\n");
             }
             writer.write("#include <axis/AxisWrapperAPI.hpp>\n");
+            writer.write ("#include <axis/Axis.hpp>\n\n");
+            
             writer.write("#include <string.h>\n\n"); // for memcpy
             writer.write("using namespace std;\n\n ");
 
@@ -248,15 +250,20 @@
         }
         else
         {
-            if (returntypeisarray || (returntypeissimple && returntype.isNillable()
-                    && !(CUtils.isPointerType(outparamTypeName))))
-            {
-                writer.write(outparamTypeName + " *");
-            }
-            else
-            {
-                writer.write(outparamTypeName);
-            }
+        	if (returntypeissimple
+                    && (!(returntype.isNillable() || returntype.isOptional()) || CUtils
+                            .isPointerType(outparamTypeName)))
+        	{
+	        writer.write (outparamTypeName);
+        	}
+        	else if (outparamTypeName.lastIndexOf ("*") > 0)
+    	    {
+    	        writer.write (outparamTypeName);
+    	    }
+    	    else
+    	    {			//for AnyType too
+    	        writer.write (outparamTypeName + "*");
+    	    }
 
             if (WSDL2Ws.verbose)
             {
@@ -276,15 +283,20 @@
                 writer.write(", ");
             }
             typeissimple = CUtils.isSimpleType(paramTypeName);
-            if (typeissimple && ((ParameterInfo) paramsB.get(i)).isNillable()
-                    && !(CUtils.isPointerType(paramTypeName)))
-            {
-                writer.write(paramTypeName + " * Value" + i);
-            }
-            else
-            {
-                writer.write(paramTypeName + " Value" + i);
-            }
+            if (typeissimple
+        		    && (!(((ParameterInfo) paramsB.get (0)).isNillable () || ((ParameterInfo) paramsB.get (0)).isOptional())
+        			|| CUtils.isPointerType(paramTypeName)))
+        	{
+        		writer.write (paramTypeName + " Value0");
+        	}
+        	else if (paramTypeName.lastIndexOf ("*") > 0)
+        	{
+        		writer.write (paramTypeName + " Value0");
+        	}
+        	else
+        	{			//for AnyType too
+        		writer.write (paramTypeName + "* Value0");
+        	}
         }
         // Multiples parameters so fill the methods prototype
         ArrayList paramsC = (ArrayList) minfo.getOutputParameterTypes();
@@ -329,7 +341,7 @@
                     else if (outparamTypeName.equals("xsd__string"))
                     {
                         writer.write(outparamTypeName + " Ret;\n");
-                        writer.write("\t"+ outparamTypeName + "=0;\n");
+                        writer.write("\tRet = 0;\n");
                     }
                     else
                     {
@@ -524,60 +536,140 @@
                     if (CUtils.isSimpleType(qname))
                     {
                         containedType = CUtils.getclass4qname(qname);
-                        writer.write("\t\t\t\t" + currentParamName + " = ("
-                                + currentParaType + "&)m_pCall->getBasicArray("
-                                + CUtils.getXSDTypeForBasicType(containedType)
-                                + ", \"" + currentType.getParamName()
-                                + "\", 0);\n");
+                        writer.write("\n\t\t\tAxis_Array * pReturn" + i + " = m_pCall->getBasicArray(" + CUtils.getXSDTypeForBasicType (containedType) 
+            					+ ", \"" + currentType.getParamName ()
+            					+ "\", 0);\n\n");
+            			writer.write("\t\t\tif( pReturn" + i + " != NULL && 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("\t\t\t\telse\n");
+            			writer.write("\t\t\t\t{\n");
+            			writer.write("\t\t\t\t\t(*OutValue" + i + ")->clear();\n");
+            			writer.write("\t\t\t\t}\n\n");
+            			writer.write("\t\t\t\t(*OutValue" + i + ")->clone(*pReturn" + i + ");\n");
+            			writer.write("\t\t\t}\n\n");
+            			writer.write("\t\t\tAxis::AxisDelete( (void *) pReturn" + i + ", XSD_ARRAY);\n");
                     }
                     else
                     {
                         containedType = qname.getLocalPart();
-                        writer
-                                .write("\t\t\t\t"
-                                        + currentParamName
-                                        + " = ("
-                                        + currentParaType
-                                        + "&)m_pCall->getCmplxArray((void*) Axis_DeSerialize_"
-                                        + containedType);
-                        writer.write("\t\t\t\t, (void*) Axis_Create_"
-                                + containedType + ", (void*) Axis_Delete_"
-                                + containedType + ", (void*) Axis_GetSize_"
-                                + containedType + ", \""
-                                + currentType.getParamName() + "\", Axis_URI_"
-                                + containedType + ");\n");
+                        writer.write("\n\t\t\tif (OutValue" + i + " != NULL)\n" );
+        			    writer.write("\t\t\t{\n");
+        			    writer.write("\t\t\t\tif (" + currentParamName + " == NULL)\n");
+        			    writer.write("\t\t\t\t{\n");
+        			    writer.write("\t\t\t\t\t" + currentParamName + " = new " + containedType + "_Array();\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(" + currentParamName + ")->clear();\n");
+        			    writer.write("\t\t\t\t}\n");
+        			    writer.
+        				write
+        				("\t\t\t\tm_pCall->getCmplxArray(" + currentParamName + ", (void*) Axis_DeSerialize_"
+        				 + containedType);
+        			    //writer.write(", (void*) Axis_Create_"+containedType+", (void*) Axis_Delete_"+containedType+", (void*) Axis_GetSize_"+containedType+", \""+currentType.getElementName().getLocalPart()+"\", Axis_URI_"+containedType+");\n");
+        			    writer.write (", (void*) Axis_Create_"
+        					  + containedType
+        					  + ", (void*) Axis_Delete_"
+        					  + containedType
+        					  + ", (void*) Axis_GetSize_"
+        					  + containedType
+        					  + ", \""
+        					  +
+        					  currentType.
+        					  getElementNameAsString () +
+        					  "\", Axis_URI_" + containedType +
+        					  ");\n");
+        			    writer.write("\t\t\t}\n");
+        			    writer.write("\t\t\telse\n");
+        			    writer.write("\t\t\t{\n");
+        			    writer.write("\t\t\t\t// Unable to return value, but will deserialize to ensure subsequent elements can be correctly processed.\n");
+        				writer.write("\t\t\t\t" + containedType + "_Array * pTemp" + i + " = new " + containedType + "_Array();\n");
+        				writer.write("\t\t\t\tm_pCall->getCmplxArray(pTemp" + i + ", (void*) Axis_DeSerialize_"
+        						 + containedType);
+        			    writer.write (", (void*) Axis_Create_"
+        					  + containedType
+        					  + ", (void*) Axis_Delete_"
+        					  + containedType
+        					  + ", (void*) Axis_GetSize_"
+        					  + containedType
+        					  + ", \""
+        					  +
+        					  currentType.
+        					  getElementNameAsString () +
+        					  "\", Axis_URI_" + containedType +
+        					  ");\n");
+        				writer.write("\t\t\t\tdelete pTemp" + i + ";\n");
+        				writer.write("\t\t\t}\n");
                     }
                 }
                 else
                 {
                     if (typeissimple)
                     {
-                        //Chinthana:
-                        //Changes have done for handle AXIS_OUT_PARAM Types.
-                        if (CUtils.isPointerType(currentParaType))
-                        {
-                            writer.write("\t\t\t\t"
-                                    + currentParamName
-                                    + " = m_pCall->"
-                                    + CUtils.getParameterGetValueMethodName(
-                                            currentParaType, false) + "(\""
-                                    + currentType.getParamName() + "\", 0);\n");
-                        }
-                        else
-                        {
-                            writer
-                                    .write("\t\t\t\t"
-                                            + currentParamName
-                                            + " = *(m_pCall->"
-                                            + CUtils
-                                                    .getParameterGetValueMethodName(
-                                                            currentParaType,
-                                                            false) + "(\""
-                                            + currentType.getParamName()
-                                            + "\", 0));\n");
-                        }
-                        //02/06/2006.....................................................
-                    }
+                    	if( i > 0)
+        		        {
+        				    writer.write( "\n");
+        		        }
+        		        
+        				if (CUtils.isPointerType(currentParaType))
+        				{
+        				    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( pReturn" + i + " != NULL && 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" + currentParaType + " * pReturn" + i + " = m_pCall->" + CUtils.getParameterGetValueMethodName( currentParaType, false) + "( \"" + currentType.getParamName() + "\", 0);\n");
+        				    writer.write( "\n");
+        				    writer.write( "\t\t\tif( pReturn" + i + " != NULL && 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
                     {
                         writer
@@ -617,13 +709,13 @@
                         + "m_pCall->getBasicArray("
                         + CUtils.getXSDTypeForBasicType(containedType) + ", \""
                         + returntype.getParamName() + "\", 0);\n");
-                writer.write ("\t\t\t\tRetArray.clone(*RetAxisArray);\n\t\t\t}\n");
+                writer.write ("\t\t\t\tRetArray->clone(*RetAxisArray);\n");
             }
             else
             {
                 containedType = qname.getLocalPart();
                 writer.write("\t\t\t\tAxis_Array * RetAxisArray = "
-                        + "m_pCall->getCmplxArray((void*) Axis_DeSerialize_"
+                        + "m_pCall->getCmplxArray(RetArray, (void*) Axis_DeSerialize_"
                         + containedType);
                 //damitha
                 writer.write(", (void*) Axis_Create_" + containedType
@@ -632,7 +724,7 @@
                         + returntype.getParamName() + "\", Axis_URI_"
                         + containedType + ");\n");
                 writer.write("\t\t\tRetArray->clone(*(" + containedType + "_Array *)RetAxisArray);\n");
-				writer.write("\t\t\t((" + containedType + "_Array *)RetAxisArray)->clear();\n");
+				
             }
             
             writer.write ("\t\t\t\tAxis::AxisDelete( (void *)RetAxisArray, XSD_ARRAY);\n\t\t\t}\n");

Modified: webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/WrapWriter.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/WrapWriter.java?rev=354322&r1=354321&r2=354322&view=diff
==============================================================================
--- webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/WrapWriter.java (original)
+++ webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/WrapWriter.java Mon Dec  5 21:35:12 2005
@@ -395,11 +395,11 @@
                                 + i
                                 + " = ("
                                 + CUtils.getBasicArrayNameforType(containedType)
-                                + "&)pIWSDZ->getBasicArray("
+                                + "&)*(pIWSDZ->getBasicArray("
                                 + CUtils.getXSDTypeForBasicType(containedType)
                                 + ", \""
                                 + parameterName
-                                + "\",0);\n");
+                                + "\",0));\n");
                     }
                     else
                     {