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 di...@apache.org on 2005/12/02 14:46:14 UTC

svn commit: r351718 - /webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/literal/ClientStubWriter.java

Author: dicka
Date: Fri Dec  2 05:46:11 2005
New Revision: 351718

URL: http://svn.apache.org/viewcvs?rev=351718&view=rev
Log:
Resolve problem in client deserialiation, where arrays of simple types are not being correctly detected within WSDL2Ws, resulting in generated stubs attempting to deserialize a single simple element.

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

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=351718&r1=351717&r2=351718&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 Fri Dec  2 05:46:11 2005
@@ -777,9 +777,10 @@
 		    }
 		    else
 		    {
-			currentParaType = type.getLanguageSpecificName ();
+		        currentParaType = WrapperUtils.getClassNameFromParamInfoConsideringArrays(currentType, wscontext);
+		        typeisarray = (currentParaType.lastIndexOf("_Array") > 0);
 		    }
-		    typeisarray = type.isArray ();
+		    typeisarray |= type.isArray ();
 		}
 		else
 		{
@@ -793,45 +794,55 @@
 		// Some code need to be merged as we have some duplicated in coding here.
 		if (typeisarray)
 		{
-		    Type arrayType = WrapperUtils.getArrayType (type);
-		    QName qname = arrayType.getName ();
+		    QName qname = null;
+		    if (WrapperUtils.getArrayType (type) != null)
+		    {
+		        qname = WrapperUtils.getArrayType (type).getName ();
+		    }
+		    else
+		    {
+		        qname = type.getName ();
+		    }
 		    String containedType = null;
+		    
 		    if (CUtils.isSimpleType (qname))
 		    {
-			containedType = CUtils.getclass4qname (qname);
-			writer.write ("\t\t\t" + currentParamName + " = (" + currentParaType 
-				+ "&)m_pCall->getBasicArray(" + CUtils.getXSDTypeForBasicType (containedType) 
-				+ ", \"" + currentType.getParamName ()	//getElementName().getLocalPart()
-				+ "\", 0);\n");
+				containedType = CUtils.getclass4qname (qname);
+
+				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
 		    {
-
-			if (arrayType.isSimpleType ())
-			{	//SimpleType in the schema 
-			    containedType =
-				CUtils.getclass4qname (arrayType.
-						       getBaseType ());
-			    writer.write ("\t\t\t" + currentParamName 
-					+ " = (" + currentParaType + "&)m_pCall->getBasicArray(" 
-					+ CUtils.getXSDTypeForBasicType (containedType) 
-					+ ", \"" + currentType.getParamName ()	//getElementName().getLocalPart()
-					+ "\", 0);\n");
-			}
-			else
-			{
 			    containedType = qname.getLocalPart ();
-			    writer.write("\t\t\tif (" + currentParamName + " == NULL)\n");
-			    writer.write("\t\t\t{\n");
-			    writer.write("\t\t\t\t" + currentParamName + " = new " + containedType + "_Array();\n");
-			    writer.write("\t\t\t}\n");
-			    writer.write("\t\t\telse\n");
+			    writer.write("\n\t\t\tif (OutValue" + i + " != NULL)\n" );
 			    writer.write("\t\t\t{\n");
-			    writer.write("\t\t\t\t(" + currentParamName + ")->clear();\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\tm_pCall->getCmplxArray(" + currentParamName + ", (void*) Axis_DeSerialize_"
+				("\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_"
@@ -846,7 +857,27 @@
 					  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
@@ -929,27 +960,13 @@
 			{
 			    //writer.write("\t\t\t" + currentParamName + " = ("+currentParaType+"*)m_pCall->getCmplxObject((void*) Axis_DeSerialize_"+currentParaType+", (void*) Axis_Create_"+currentParaType+", (void*) Axis_Delete_"+currentParaType+",\""+currentType.getElementName().getLocalPart()+"\", 0);\n"); 
 			    //Samisa 22/08/2004
-
-			    if (currentParaType.lastIndexOf ("*") > 0)
+			    
+			    int lastIndexOfStar = currentParaType.lastIndexOf("*");
+			    if (lastIndexOfStar > 0)
 			    {
-				writer.write ("\t\t\t"
-					      + currentParamName
-					      + " = ("
-					      + currentParaType
-					      +
-					      ")m_pCall->getCmplxObject((void*) Axis_DeSerialize_"
-					      + currentParaType +
-					      ", (void*) Axis_Create_" +
-					      currentParaType +
-					      ", (void*) Axis_Delete_" +
-					      currentParaType + ",\"" +
-					      currentType.
-					      getElementNameAsString () +
-					      "\", 0);\n");
-
+			        currentParaType = currentParaType.substring(0, lastIndexOfStar);
 			    }
-			    else
-				writer.write ("\t\t\t"
+				writer.write ("\n\t\t\t"
 					      + currentParamName
 					      + " = ("
 					      + currentParaType