Author: nadiramra
Date: Thu Apr 13 23:29:26 2006
New Revision: 394029
URL: http://svn.apache.org/viewcvs?rev=394029&view=rev
Log:
C support fixes/enhancements.
Modified:
webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/ParmHeaderFileWriter.java
webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal/ClientStubWriter.java
Modified:
webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/ParmHeaderFileWriter.java
URL:
http://svn.apache.org/viewcvs/webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/ParmHeaderFileWriter.java?rev=394029&r1=394028&r2=394029&view=diff
==============================================================================
---
webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/ParmHeaderFileWriter.java
(original)
+++
webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/ParmHeaderFileWriter.java
Thu Apr 13 23:29:26 2006
@@ -388,6 +388,12 @@
writer.write("#include <axis/GDefine.h>\n");
writer.write("#include <axis/AxisUserAPI.h>\n");
writer.write("#include <axis/AxisUserAPIArrays.h>\n");
+ writer.write("#include <axis/SoapEnvVersions.h>\n");
+ writer.write("#include <axis/WSDDDefines.h>\n");
+ writer.write("#include <axis/TypeMapping.h>\n");
+ writer.write("#include <axis/client/Stub.h>\n");
+ writer.write("#include <axis/client/Call.h>\n");
+
Vector typeSet = new Vector();
String typeName = null;
Modified:
webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal/ClientStubWriter.java
URL:
http://svn.apache.org/viewcvs/webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal/ClientStubWriter.java?rev=394029&r1=394028&r2=394029&view=diff
==============================================================================
---
webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal/ClientStubWriter.java
(original)
+++
webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal/ClientStubWriter.java
Thu Apr 13 23:29:26 2006
@@ -111,8 +111,7 @@
* @see
org.apache.axis.wsdl.wsdl2ws.c.ClientStubWriter#writeMethodInWrapper(org.apache.axis.wsdl.wsdl2ws.info.MethodInfo)
*/
- public void writeMethodInWrapper(MethodInfo minfo)
- throws WrapperFault, IOException
+ public void writeMethodInWrapper(MethodInfo minfo) throws WrapperFault,
IOException
{
boolean isAllTreatedAsOutParams = false;
ParameterInfo returntype = null;
@@ -131,7 +130,6 @@
boolean returntypeissimple = false;
boolean returntypeisarray = false;
String outparamType = null;
- boolean aretherearrayparams = false;
if (returntype != null)
retType =
wscontext.getTypemap().getType(returntype.getSchemaName());
@@ -166,52 +164,170 @@
if (returntype == null)
writer.write("void");
- else if (returntypeisarray
- || (returntypeissimple
- && (!returntype.isNillable() ||
CUtils.isPointerType(outparamType))))
+ else if (returntypeissimple
+ && (!(returntype.isNillable() || returntype.isOptional())
+ || CUtils.isPointerType(outparamType)))
writer.write(outparamType);
else if (outparamType.lastIndexOf("*") > 0)
writer.write(outparamType);
else // for AnyType too
writer.write(outparamType + "*");
- writer.write(" " + methodName + "(AXISCHANDLE stub");
+ writer.write(" " + methodName + "(AXISCHANDLE stub, ");
ArrayList paramsB = (ArrayList) params;
- for (int i = 0; i < paramsB.size(); i++)
+ ParameterInfo paramtype = null;
+ if (0 < paramsB.size ())
{
- paraTypeName =
-
WrapperUtils.getClassNameFromParamInfoConsideringArrays((ParameterInfo)
paramsB.get(i),wscontext);
- writer.write(", " + paraTypeName + " Value" + i);
+ type = wscontext.getTypemap ().getType (((ParameterInfo)
paramsB.get (0)).getSchemaName ());
+ paramtype = (ParameterInfo) paramsB.get (0);
+ String baseTypeName = null;
+ if (type != null)
+ {
+ if (type.isSimpleType ())
+ {
+ baseTypeName = CUtils.getclass4qname (type.getBaseType ());
+ paraTypeName =
WrapperUtils.getClassNameFromParamInfoConsideringArrays(paramtype, wscontext);
+ }
+ else
+ {
+ paraTypeName = type.getLanguageSpecificName ();
+ if (CUtils.isSimpleType (paraTypeName))
+ paraTypeName =
WrapperUtils.getClassNameFromParamInfoConsideringArrays(paramtype, wscontext);
+
+ typeisarray = (paraTypeName.lastIndexOf ("_Array") > 0);
+ if (!typeisarray)
+ paraTypeName = type.getLanguageSpecificName ();
+
+ typeissimple = CUtils.isSimpleType (paraTypeName);
+ }
+ typeisarray |= type.isArray ();
+ }
+ else
+ {
+ paraTypeName = ((ParameterInfo) paramsB.get (0)).getLangName
();
+ paramtype = (ParameterInfo) paramsB.get (0);
+ typeisarray = false;
+ }
- if ((type = wscontext.getTypemap().getType(((ParameterInfo)
paramsB.get(i)).getSchemaName())) != null
- && type.isArray())
- aretherearrayparams = true;
- }
+ if (baseTypeName == null)
+ baseTypeName = paraTypeName;
+
+ typeissimple = CUtils.isSimpleType (baseTypeName);
+ if (paramtype.getType().isAttachment())
+ writer.write("ISoapAttachment *Value0");
+ else if (typeissimple
+ && (!(((ParameterInfo) paramsB.get (0)).isNillable () ||
((ParameterInfo) paramsB.get (0)).isOptional())
+ || CUtils.isPointerType(baseTypeName)))
+ {
+ writer.write (paraTypeName + " Value0");
+ }
+ else if (paraTypeName.lastIndexOf ("*") > 0)
+ writer.write (paraTypeName + " Value0");
+ else //for AnyType too
+ writer.write (paraTypeName + "* Value0");
+
+ for (int i = 1; i < paramsB.size (); i++)
+ {
+ baseTypeName = null;
+ type = wscontext.getTypemap ().getType (((ParameterInfo)
paramsB.get (i)).getSchemaName ());
+ paramtype = (ParameterInfo) paramsB.get (i);
+ if (type != null)
+ {
+ if (type.isSimpleType ())
+ { //schema defined simpleType
+ baseTypeName = CUtils.getclass4qname (type.getBaseType
());
+ paraTypeName =
WrapperUtils.getClassNameFromParamInfoConsideringArrays(paramtype, wscontext);
+ }
+ else
+ {
+ paraTypeName = type.getLanguageSpecificName ();
+ if (CUtils.isSimpleType (paraTypeName))
+ paraTypeName =
WrapperUtils.getClassNameFromParamInfoConsideringArrays(paramtype, wscontext);
+
+ typeisarray = (paraTypeName.lastIndexOf ("_Array") >
0);
+ if (!typeisarray)
+ paraTypeName = type.getLanguageSpecificName ();
+ }
+
+ typeisarray |= type.isArray ();
+ typeissimple = CUtils.isSimpleType (paraTypeName);
+ }
+ else
+ {
+ paraTypeName = ((ParameterInfo) paramsB.get
(i)).getLangName ();
+ paramtype = (ParameterInfo) paramsB.get (i);
+ typeisarray = false;
+ }
+
+ if (baseTypeName == null)
+ baseTypeName = paraTypeName;
+
+ typeissimple = CUtils.isSimpleType (baseTypeName);
+ if (paramtype.getType().isAttachment())
+ writer.write(", ISoapAttachment *Value" + i);
+ else if (typeissimple
+ && (!(((ParameterInfo) paramsB.get (i)).isNillable
()
+ || ((ParameterInfo) paramsB.get
(i)).isOptional())
+ || CUtils.isPointerType(baseTypeName)))
+ writer.write (", " + paraTypeName + " Value" + i);
+ else if (paraTypeName.lastIndexOf ("*") > 0)
+ writer.write (", " + paraTypeName + " Value" + i);
+ else //for AnyType too
+ writer.write (", " + paraTypeName + "* Value" + i);
+ } // end for loop
+ } // end if (0 < paramsB.size ())
// Multiples parameters so fill the methods prototype
ArrayList paramsC = (ArrayList) minfo.getOutputParameterTypes();
if (isAllTreatedAsOutParams)
- for (int i = 0; i < paramsC.size(); i++)
+ for (int i = 0; i < paramsC.size (); i++)
{
- type = wscontext.getTypemap().getType(((ParameterInfo)
paramsC.get(i)).getSchemaName());
- writer.write(", AXIS_OUT_PARAM "
- +
WrapperUtils.getClassNameFromParamInfoConsideringArrays(
- (ParameterInfo) paramsC.get(i),
wscontext) + "* OutValue" + i);
- if ((type = wscontext.getTypemap().getType(((ParameterInfo)
paramsC.get(i)).getSchemaName())) != null
- && type.isArray())
- aretherearrayparams = true;
- }
+ String baseTypeName = null;
+ type = wscontext.getTypemap ().getType (((ParameterInfo)
paramsC.get (i)).getSchemaName ());
+
+ ParameterInfo param = (ParameterInfo) paramsC.get (i);
+ String paramType =
WrapperUtils.getClassNameFromParamInfoConsideringArrays (param, wscontext);
+ if (type.isSimpleType())
+ baseTypeName = CUtils.getclass4qname(type.getBaseType());
+ else
+ baseTypeName = paramType;
+
+ boolean bTypeHasStar = paramType.endsWith("*");
+
+ if (paramsB.size()!=0 || 0!=i)
+ writer.write(", ");
+
+ writer.write("AXIS_OUT_PARAM " + paramType);
+ if (CUtils.isSimpleType(baseTypeName))
+ {
+ if ((param.isOptional() || param.isNillable()) &&
!CUtils.isPointerType(baseTypeName))
+ {
+ if (bTypeHasStar)
+ writer.write(" *");
+ else
+ writer.write(" **");
+ }
+ else if (CUtils.isPointerType(baseTypeName) ||
!bTypeHasStar)
+ writer.write(" *");
+ }
+ else if(bTypeHasStar)
+ writer.write(" *");
+ else
+ writer.write(" **");
+
+ writer.write(" OutValue" + i);
+ } // end for-loop
writer.write(")\n{\n");
- if (aretherearrayparams || returntypeisarray)
- writer.write("\tAxisc_Array array;\n");
writer.write("\tAXISCHANDLE call = axiscGetCall(stub);\n");
+
if (returntype != null)
{
writer.write("\t");
+
if (returntypeisarray)
- writer.write(outparamType + " RetArray = {NULL, 0,
XSDC_UNKNOWN};\n");
+ writer.write(outparamType + " *RetArray = (" + outparamType +
" *)axiscAxisNew(AXISC_ARRAY, 0);\n");
else if (!returntypeissimple)
{
// for AnyType and complex types
@@ -220,7 +336,8 @@
else
writer.write(outparamType + "* pReturn = NULL;\n");
}
- else if (returntype.isNillable() &&
!(CUtils.isPointerType(outparamType)))
+ else if ((returntype.isNillable() || returntype.isOptional())
+ && !(CUtils.isPointerType(outparamType)))
writer.write(outparamType + "* Ret = NULL;\n");
else
{
@@ -243,16 +360,14 @@
}
else
writer.write(outparamType + " Ret;\n");
- // TODO initialize return parameter appropriately.
}
+ // TODO initialize return parameter appropriately.
}
writer.write ("\tconst char* pcCmplxFaultName = NULL;\n");
writer.write("\n");
- writer.write("\t/* Following will establish the connections with the
server too */\n");
writer.write("\tif (AXISC_SUCCESS != axiscInitializeCall(call,
C_DOC_PROVIDER " + ")) return ");
-
if (returntype != null)
writer.write((returntypeisarray ? "RetArray" : returntypeissimple
? "Ret" : "pReturn") + ";\n");
else
@@ -263,15 +378,47 @@
writer.write("\t\taxiscSetTransportPropertyCall(call,AXISC_SOAPACTION_HEADER ,
\""
+ minfo.getSoapAction() + "\");\n");
writer.write("\n");
+
writer.write("\taxiscSetSOAPVersionCall(call, SOAP_VER_1_1);\n");
//TODO check which version is it really.
- writer.write("\taxiscSetOperationCall(call, \""
+
+ if( minfo.getInputMessage() != null)
+ {
+ writer.write("\taxiscSetOperationCall(call, \""
+ minfo.getInputMessage().getLocalPart() + "\", \""
+ minfo.getInputMessage().getNamespaceURI() + "\");\n");
+ }
- // TODO add attributes to soap method
-
+ // Add attributes to soap method
+ for (int i = 0; i < paramsB.size (); i++)
+ {
+ ParameterInfo param = (ParameterInfo) paramsB.get (i);
+
+ // Skip non-attributes
+ if (!param.isAttribute ())
+ continue;
+
+ // Process attributes
+ String elementType = param.getElementName ().getLocalPart ();
+
+ if ("string".equals (elementType))
+ {
+ writer.write ("\taxiscSetSOAPMethodAttribute(call, \""
+ + param.getParamName () + "\", \"\", Value" + i +
");\n");
+ }
+ else if ("int".equals (elementType))
+ {
+ writer.write ("\t{\n");
+ writer.write ("\t\tchar buffer[20];\n");
+ writer.write ("\t\tsprintf(buffer,\"%d\", Value" + i + ");\n");
+ writer.write ("\t\taxiscSetSOAPMethodAttribute(call, \"" +
+ param.getParamName () + "\", \"\", buffer);\n");
+ writer.write ("\t}\n");
+ }
+ } // end for-loop
+
// new calls from stub base
+ writer.write("\n");
writer.write ("\taxiscIncludeSecure(stub);\n");
writer.write ("\taxiscApplyUserPreferences(stub);\n");
writer.write("\n");
@@ -295,6 +442,7 @@
paraTypeName = type.getLanguageSpecificName();
if (CUtils.isSimpleType(paraTypeName))
paraTypeName =
WrapperUtils.getClassNameFromParamInfoConsideringArrays(param,wscontext);
+
typeisarray = (paraTypeName.lastIndexOf("_Array") > 0);
if (!typeisarray)
paraTypeName = type.getLanguageSpecificName();
@@ -318,7 +466,7 @@
if (((ParameterInfo)paramsB.get(i)).isOptional())
writer.write("\tif (Value" + i + " != NULL)\n\t{\n");
else
- writer.write("\t{\n");
+ writer.write("\t{\n"); // following was added to
instantiate variables on the fly
if (namespace.length () == 0)
{
@@ -430,118 +578,208 @@
writer.write("\n");
- writer.write("\tif (AXISC_SUCCESS == axiscInvokeCall(call))\n\t{\n");
- writer.write("\t\tif(AXISC_SUCCESS == axiscCheckMessageCall(call, \""
+ writer.write("\tif (AXISC_SUCCESS == axiscInvokeCall(call))\n\t{\n");
+ if (minfo.getOutputMessage () != null)
+ {
+ writer.write("\t\tif(AXISC_SUCCESS == axiscCheckMessageCall(call,
\""
+ minfo.getOutputMessage().getLocalPart() + "\", \""
+ minfo.getOutputMessage().getNamespaceURI() +
"\"))\n\t\t{\n");
+ }
if (isAllTreatedAsOutParams)
{
String currentParamName;
String currentParaType;
+
for (int i = 0; i < paramsC.size(); i++)
{
+ String baseTypeName = null;
ParameterInfo currentType = (ParameterInfo) paramsC.get(i);
+
type =
wscontext.getTypemap().getType(currentType.getSchemaName());
if (type != null)
{
- if (type.isSimpleType())
- currentParaType =
CUtils.getclass4qname(type.getBaseType());
+ if (type.isSimpleType ())
+ {
+ baseTypeName = CUtils.getclass4qname (type.getBaseType
());
+ currentParaType =
WrapperUtils.getClassNameFromParamInfoConsideringArrays(currentType, wscontext);
+ }
else
- currentParaType = type.getLanguageSpecificName();
- typeisarray = type.isArray();
+ {
+ currentParaType =
WrapperUtils.getClassNameFromParamInfoConsideringArrays(currentType, wscontext);
+ typeisarray = (currentParaType.lastIndexOf("_Array") >
0);
+ }
+
+ typeisarray |= type.isArray ();
}
else
{
- currentParaType = ((ParameterInfo)
paramsC.get(i)).getLangName();
+ currentParaType = ((ParameterInfo) paramsC.get
(i)).getLangName ();
typeisarray = false;
}
- typeissimple = CUtils.isSimpleType(currentParaType);
-
- if (CUtils.isPointerType(currentParaType))
- currentParamName = "*OutValue" + i;
- else
- currentParamName = "OutValue" + i;
+ if (baseTypeName == null)
+ baseTypeName = currentParaType;
+
+ typeissimple = CUtils.isSimpleType (baseTypeName);
+ currentParamName = "*OutValue" + i;
// Some code need to be merged as we have some duplicated in
coding here.
if (typeisarray)
{
- QName qname = WrapperUtils.getArrayType(type).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\tarray =
axiscGetBasicArrayCall(call, "
- +
CUtils.getXSDTypeForBasicType(containedType) + ", \""
- + currentType.getElementNameAsString() +
"\", 0);\n");
+
+ writer.write("\n\t\t\tOutValue" + i + " =
axiscGetBasicArrayCall(call, "
+ + CUtils.getXSDTypeForBasicType
(containedType)
+ + ", \"" + currentType.getParamName ()
+ + "\", 0);\n\n");
}
else
{
- containedType = qname.getLocalPart();
- writer.write("\t\t\tarray =
axiscGetCmplxArrayCall(call, (void*) Axis_DeSerialize_"
- + containedType);
- writer.write(", (void*) Axis_Create_" + containedType
- + ", (void*) Axis_Delete_" + containedType
- + ", (void*) Axis_GetSize_" +
containedType
- + ", \""
- + currentType.getElementNameAsString()
- + "\", Axis_URI_" + containedType
- + ");\n");
-
+ containedType = qname.getLocalPart ();
+ 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\t" + currentParamName + " = new
" + containedType + "_Array();\n");
+ writer.write("\t\t\t\telse\n");
+ writer.write("\t\t\t\t\t(" + currentParamName +
")->clear();\n");
+
+ writer.write("\t\t\t\taxiscGetCmplxArrayCall(call, " +
currentParamName
+ + ", (void*) Axis_DeSerialize_" + containedType
+ + ", (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\taxiscGetCmplxArrayCall(call,
pTemp" + i
+ + ", (void*) Axis_DeSerialize_" + containedType
+ + ", (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");
}
- writer.write("\t\t\tmemcpy(OutValue" + i + ", &array,
sizeof(Axisc_Array));\n");
}
else if (typeissimple)
{
- writer.write( "\t\t\t"
- + currentParamName + " = "
- + CUtils.getParameterGetValueMethodName(
currentParaType, false)
- + "(call, \"" +
currentType.getElementNameAsString() + "\", 0);\n");
- }
- else if (currentType.isAnyType())
- {
- writer.write( "\t\t\t"
- + currentParamName
- + " = (" + currentParaType +
"*)axiscGetAnyObjectCall(call);\n");
- }
- else if (currentParaType.lastIndexOf ("*") > 0)
- {
- writer.write( "\t\t\t"
- + currentParamName
- + " = ("
- + currentParaType
- + ")axiscGetCmplxObjectCall(call, (void*)
Axis_DeSerialize_"
- + currentParaType
- + ", (void*) Axis_Create_" + currentParaType
- + ", (void*) Axis_Delete_" + currentParaType
- + ",\""
- + currentType.getElementNameAsString()
- + "\", 0);\n");
+ if( i > 0)
+ writer.write( "\n");
+
+ if (CUtils.isPointerType(baseTypeName))
+ {
+ String xsdType =
WrapperUtils.getClassNameFromParamInfoConsideringArrays ((ParameterInfo)
paramsC.get (i), wscontext);
+
+ if( !CUtils.isPointerType(baseTypeName))
+ {
+ if (!baseTypeName.equals(currentParaType))
+ xsdType = currentParaType;
+
+ xsdType += " *";
+ }
+
+ writer.write( "\t\t\t" + currentParaType + " pReturn"
+ i + " = " + CUtils.getParameterGetValueMethodName( baseTypeName, false) +
"(call, \"" + 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 + ") axiscAxisNew(XSDC_STRING, 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\tstrcpy( (char *) *OutValue"
+ i + ", pReturn" + i + ");\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 + ") axiscAxisNew(XSDC_STRING,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\taxiscAxisDelete( (void *)
pReturn" + i + ", " + CUtils.getXSDTypeForBasicType( baseTypeName) + ");\n");
+ }
+ else
+ {
+ writer.write( "\t\t\t" + currentParaType + " *
pReturn" + i + " = " + CUtils.getParameterGetValueMethodName( baseTypeName,
false) + "(call, \"" + 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");
+ if (currentType.isNillable() ||
currentType.isOptional())
+ {
+ 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\t*");
+ }
+ else
+ writer.write( "\t\t\t\t");
+
+ writer.write( "*OutValue" + i + " = *pReturn" + i +
";\n");
+ writer.write( "\t\t\t}\n");
+ writer.write( "\n");
+ writer.write( "\t\t\taxiscAxisDelete( (void *)
pReturn" + i + ", " + CUtils.getXSDTypeForBasicType( baseTypeName) + ");\n");
+ }
+ }
+ else if (currentType.isAnyType ())
+ {
+ writer.write ("\t\t\t"
+ + currentParamName + " = *(" + currentParaType
+ + "*)axiscGetAnyObjectCall(call);\n");
}
else
{
- writer.write( "\t\t\t"
- + currentParamName
- + " = ("
- + currentParaType
- + "*)axiscGetCmplxObjectCall(call, (void*)
Axis_DeSerialize_"
- + currentParaType
- + ", (void*) Axis_Create_" + currentParaType
- + ", (void*) Axis_Delete_" + currentParaType
- + ",\""
- + currentType.getElementNameAsString()
- + "\", 0);\n");
- }
+ int lastIndexOfStar = currentParaType.lastIndexOf("*");
+ if (lastIndexOfStar > 0)
+ currentParaType = currentParaType.substring(0,
lastIndexOfStar);
+
+ writer.write ("\n\t\t\t"
+ + currentParamName + " = (" + currentParaType
+ + "*)axiscGetCmplxObjectCall(call, (void*)
Axis_DeSerialize_" + currentParaType
+ + ", (void*) Axis_Create_" + currentParaType
+ + ", (void*) Axis_Delete_" + currentParaType +
",\""
+ + currentType.getElementNameAsString () + "\",
0);\n");
+ }
}
- writer.write("\t\t}\n");
- writer.write( "\t}\n\taxiscUnInitializeCall(call);\n");
+ writer.write ("\t\t}\n");
+ writer.write ("\t}\n");
+ writer.write ("\taxiscUnInitializeCall(call);\n");
}
else if (returntype == null)
{
- writer.write("\t\t\t/*not successful*/\n\t\t}\n");
- writer.write("\t}\n\taxiscUnInitializeCall(call);\n");
+ if (minfo.getOutputMessage () != null)
+ writer.write ("\t\t\t/*not successful*/\n\t\t}\n");
+
+ writer.write ("\t}\n");
+ writer.write ("\taxiscUnInitializeCall(call);\n");
}
else if (returntypeisarray)
{
@@ -550,93 +788,139 @@
qname = WrapperUtils.getArrayType (retType).getName ();
else
qname = retType.getName ();
-
String containedType = null;
- if (CUtils.isSimpleType(qname))
+ if (CUtils.isSimpleType (qname))
{
- containedType = CUtils.getclass4qname(qname);
- writer.write( "\tarray = axiscGetBasicArrayCall(call, "
- + CUtils.getXSDTypeForBasicType(containedType)
- + ", \"" + returntype.getElementNameAsString()
+ "\", 0);\n");
+ containedType = CUtils.getclass4qname (qname);
+ writer.write ("\t\t\tRetArray = axiscGetBasicArrayCall(call, "
+ + CUtils.getXSDTypeForBasicType (containedType)
+ + ", \"" + returntype.getParamName () + "\", 0);\n");
}
else
{
- containedType = qname.getLocalPart();
- writer.write( "\tarray = axiscGetCmplxArrayCall(call, (void*)
Axis_DeSerialize_"
- + containedType);
- writer.write( ", (void*) Axis_Create_" + containedType
- + ", (void*) Axis_Delete_" + containedType
- + ", (void*) Axis_GetSize_" + containedType
- + ", \""
- + returntype.getElementNameAsString()
- + "\", Axis_URI_" + containedType
- + ");\n");
+ containedType = qname.getLocalPart ();
+ writer.write("\t\t\tRetArray = (" + containedType
+ + "_Array *) axiscGetCmplxArrayCall(call, RetArray,
(void*) Axis_DeSerialize_"
+ + containedType
+ + ", (void*) Axis_Create_" + containedType
+ + ", (void*) Axis_Delete_" + containedType
+ + ", (void*) Axis_GetSize_" + containedType
+ + ", \"" + returntype.getElementNameAsString ()
+ + "\", Axis_URI_" + containedType + ");\n");
}
- writer.write("\tmemcpy(&RetArray, &array,
sizeof(Axisc_Array));\n");
- writer.write("\t\t}\n");
- writer.write( "\t}\n\taxiscUnInitializeCall(call);\n");
- writer.write("\treturn RetArray;\n");
+ writer.write ("\t\t}\n");
+ writer.write ("\t}\n");
+ writer.write ("\taxiscUnInitializeCall(call);\n");
+ writer.write ("\treturn RetArray;\n");
}
else if (returntypeissimple)
{
if (returntype.isNillable ())
{
- writer.write( "\t\t\tRet = "
- + CUtils.getParameterGetValueMethodName(
outparamType, false)
- + "(call, \"" +
returntype.getElementNameAsString() + "\", 0);\n");
- }
- else if (CUtils.isPointerType(outparamType))
- {
- writer.write( "\t\t\t" + outparamType + " pReturn = "
- + CUtils.getParameterGetValueMethodName(
outparamType, false)
- + "(call, \"" +
returntype.getElementNameAsString() + "\", 0);\n");
- writer.write ("\t\t\tif(pReturn)\n");
- writer.write ("\t\t\t\tRet = pReturn;\n");
+ if( CUtils.isPointerType( outparamType))
+ {
+ writer.write( "\t\t\t" + outparamType + " pReturn = "
+ + CUtils.getParameterGetValueMethodName(
outparamType, false)
+ + "(call, \"" + returntype.getParamName() + "\",
0);\n");
+ }
+ else
+ {
+ writer.write( "\t\t\t" + outparamType + " * pReturn = "
+ + CUtils.getParameterGetValueMethodName(
outparamType, false)
+ + "(call, \"" + returntype.getParamName() + "\",
0);\n");
+ }
+
+ writer.write( "\n");
+ writer.write( "\t\t\tif( pReturn != NULL)\n");
+ writer.write( "\t\t\t{\n");
+ if( CUtils.isPointerType(outparamType))
+ {
+ writer.write( "\t\t\t\tRet = axiscAxisNew(XSDC_STRING,
strlen( pReturn) + 1);\n");
+ writer.write( "\t\t\t\tstrcpy( Ret, pReturn);\n");
+ }
+ else
+ {
+ writer.write( "\t\t\t\tRet = malloc(sizeof( " +
outparamType + ");\n");
+ writer.write( "\t\t\t\t*Ret = *pReturn;\n");
+ }
+
+ writer.write( "\t\t\t\taxiscAxisDelete( (void *) pReturn, " +
CUtils.getXSDTypeForBasicType( outparamType) + ");\n");
+ writer.write( "\t\t\t}\n");
+ writer.write( "\t\t}\n");
}
else
{
- writer.write( "\t\t\t" + outparamType + " *pReturn = "
- + CUtils.getParameterGetValueMethodName(
outparamType, false)
- + "(call, \"" +
returntype.getElementNameAsString() + "\", 0);\n");
- writer.write ("\t\t\tif(pReturn)\n");
- writer.write ("\t\t\t\tRet = *pReturn;\n");
- }
+ if (CUtils.isPointerType(outparamType))
+ {
+ writer.write ("\t\t\t" + outparamType +
+ " pReturn = " +
+
CUtils.getParameterGetValueMethodName(outparamType,false) + "(call, \"" +
+ returntype.getParamName () + "\", 0);\n");
+ writer.write ("\t\t\tif(pReturn)\n");
+ writer.write ("\t\t\t{\n");
+ writer.write ("\t\t\t\tRet = axiscAxisNew(XSDC_STRING,
strlen( pReturn) + 1);\n");
+ writer.write ("\t\t\t\tstrcpy( Ret, pReturn);\n");
+ writer.write ("\t\t\t\taxiscAxisDelete( pReturn,
XSD_STRING);\n");
+ writer.write ("\t\t\t}\n");
+ }
+ else
+ {
+ writer.write ("\t\t\t" + outparamType + " * pReturn = " +
+
CUtils.getParameterGetValueMethodName(outparamType, false) + "(call, \"" +
+ returntype.getSOAPElementNameAsString() + "\",
0);\n");
+ writer.write ("\t\t\tif(pReturn)\n");
+ writer.write ("\t\t\t{\n");
+
+ if( CUtils.isPointerType( outparamType))
+ writer.write ("\t\t\t\tRet = *pReturn;\n");
+ else
+ writer.write ("\t\t\t\tRet = *pReturn;\n");
+
+ writer.write ("\t\t\t\taxiscAxisDelete( (void *) pReturn,
" + CUtils.getXSDTypeForBasicType( outparamType) + ");\n");
+ writer.write ("\t\t\t}\n");
+ }
+
+ // TODO If we unexpectedly receive a nill value, when
nillable="false" we should do something appropriate, perhaps as below:
+// writer.write("\t\t\telse");
+// writer.write("\t\t\t\tthrow new
Exception(\"Unexpected use of nill\");");
+ writer.write ("\t\t}\n");
- writer.write("\t\t}\n");
- writer.write("\t}\n\taxiscUnInitializeCall(call);\n");
- writer.write("\treturn Ret;\n");
+ }
+ writer.write ("\t}\n");
+ writer.write ("\taxiscUnInitializeCall(call);\n");
+ writer.write ("\treturn Ret;\n");
}
- else if (returntype.isAnyType())
+ else if (returntype.isAnyType ())
{
- writer.write( "\t\t\tpReturn = (" + outparamType +
"*)axiscGetAnyObjectCall(call);\n\t\t}\n");
- writer.write( "\t}\n\taxiscUnInitialize(call);\n");
- writer.write("\treturn pReturn;\n");
+ writer.write ("\t\t\tpReturn = (" + outparamType +
"*)axiscGetAnyObject(call);\n\t\t}\n");
+ writer.write ("\t}\n");
+ writer.write ("\taxiscUnInitializeCall(call);\n");
+ writer.write ("\treturn pReturn;\n");
}
else
{
if (outparamType.lastIndexOf ("*") > 0)
{
- String outparamTypeBase = outparamType.substring (0,
outparamType.lastIndexOf("*"));
-
- writer.write( "\t\t\tpReturn = (" + outparamType
- + ")axiscGetCmplxObjectCall(call, (void*)
Axis_DeSerialize_" + outparamTypeBase
- + ", (void*) Axis_Create_" + outparamTypeBase
- + ", (void*) Axis_Delete_" + outparamTypeBase
- + ",\"" + returntype.getElementNameAsString() +
"\", 0);\n");
+ String outparamTypeBase = outparamType.substring
(0,outparamType.lastIndexOf("*"));
+ writer.write ("\t\t\tpReturn = (" + outparamType +
+ ")axiscGetCmplxObjectCall(call, (void*)
Axis_DeSerialize_" + outparamTypeBase +
+ ", (void*) Axis_Create_" + outparamTypeBase +
+ ", (void*) Axis_Delete_" + outparamTypeBase + ",\"" +
+ returntype.getElementNameAsString () + "\",
0);\n\t\t}\n");
}
else
{
- writer.write( "\t\t\tpReturn = (" + outparamType
- + "*)axiscGetCmplxObjectCall(call, (void*)
Axis_DeSerialize_" + outparamType
- + ", (void*) Axis_Create_" + outparamType
- + ", (void*) Axis_Delete_" + outparamType
- + ",\"" + returntype.getElementNameAsString() +
"\", 0);\n");
+ writer.write ("\t\t\tpReturn = (" + outparamType
+ + "*)axiscGetCmplxObjectCall(call, (void*)
Axis_DeSerialize_" + outparamType +
+ ", (void*) Axis_Create_" + outparamType +
+ ", (void*) Axis_Delete_" + outparamType + ",\"" +
+ returntype.getElementNameAsString () + "\",
0);\n\t\t}\n");
}
-
- writer.write("\t\t}\n");
- writer.write("\t}\n\taxiscUnInitializeCall(call);\n");
- writer.write("\treturn pReturn;\n");
+
+ writer.write ("\t}\n");
+ writer.write ("\taxiscUnInitializeCall(call);\n");
+ writer.write ("\treturn pReturn;\n");
}
//write end of method