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 2005/06/30 12:24:26 UTC

cvs commit: ws-axis/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal ClientStubWriter.java

nadiramra    2005/06/30 03:24:25

  Modified:    c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal
                        ClientStubWriter.java
  Log:
  c stubs not correct due to changes for nillable support.
  The changes being made work for some basic tests.
  
  Revision  Changes    Path
  1.34      +464 -340  ws-axis/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal/ClientStubWriter.java
  
  Index: ClientStubWriter.java
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal/ClientStubWriter.java,v
  retrieving revision 1.33
  retrieving revision 1.34
  diff -u -r1.33 -r1.34
  --- ClientStubWriter.java	23 Mar 2005 15:45:04 -0000	1.33
  +++ ClientStubWriter.java	30 Jun 2005 10:24:25 -0000	1.34
  @@ -41,75 +41,70 @@
   public class ClientStubWriter
       extends org.apache.axis.wsdl.wsdl2ws.c.ClientStubWriter
   {
  -    /**
  -     * @param wscontext
  -     * @throws WrapperFault
  -     */
  -    public ClientStubWriter(WebServiceContext wscontext) throws WrapperFault
  -    {
  -        super(wscontext);
  -    }
  +  /**
  +   * @param wscontext
  +   * @throws WrapperFault
  +   */
  +  public ClientStubWriter(WebServiceContext wscontext) throws WrapperFault
  +  {
  +      super(wscontext);
  +  }
   
  -    /* (non-Javadoc)
  -     * @see org.apache.axis.wsdl.wsdl2ws.BasicFileWriter#writeMethods()
  -     */
  -    protected void writeMethods() throws WrapperFault
  -    {
  -        try
  -        {
  -            writer.write(
  -                "AXISCHANDLE get_"
  -                    + classname
  -                    + "_stub(const char* pchEndPointUri)\n{");
  -            writer.write("\tif(pchEndPointUri)\n");
  -            writer.write("\t{\n");
  -            writer.write(
  -                "\t\treturn axiscCreateStub(pchEndPointUri, AXISC_PTHTTP1_1);\n");
  -            writer.write("\t}\n");
  -            writer.write("\telse\n");
  -            writer.write("\t{\n");
  -            writer.write(
  -                "\t\treturn axiscCreateStub(\""
  -                    + wscontext.getWrapInfo().getTargetEndpointURI()
  -                    + "\", AXISC_PTHTTP1_1);\n");
  -            writer.write("\t}\n");
  -            writer.write("}\n");
  -            writer.write("void destroy_" + classname + "_stub(AXISCHANDLE p){\n");
  -            writer.write("\taxiscDestroyStub(p);\n}\n");
  -
  -            writer.write("int get_" + classname + "_Status(AXISCHANDLE stub){\n");
  -            writer.write("\tAXISCHANDLE call = axiscGetCall(stub);\n");
  -            writer.write("\tif ( stub == NULL )\n");
  -            writer.write("\t\treturn AXISC_FAIL;\n");
  -            writer.write("\telse\n");
  -            writer.write("\t\treturn axiscGetStatusCall(call);\n");
  -            writer.write("}\n");
  +  /* (non-Javadoc)
  +   * @see org.apache.axis.wsdl.wsdl2ws.BasicFileWriter#writeMethods()
  +   */
  +  protected void writeMethods() throws WrapperFault
  +  {
  +      try
  +        {
  +          writer.write("AXISCHANDLE get_"
  +                       + classname
  +                       + "_stub(const char* pchEndPointUri)\n{");
  +          writer.write("\tif(pchEndPointUri)\n");
  +          writer.write("\t{\n");
  +          writer.write("\t\treturn axiscCreateStub(pchEndPointUri, AXISC_PTHTTP1_1);\n");
  +          writer.write("\t}\n");
  +          writer.write("\telse\n");
  +          writer.write("\t{\n");
  +          writer.write("\t\treturn axiscCreateStub(\""
  +                       + wscontext.getWrapInfo().getTargetEndpointURI()
  +                       + "\", AXISC_PTHTTP1_1);\n");
  +          writer.write("\t}\n");
  +          writer.write("}\n");
  +          writer.write("void destroy_" + classname + "_stub(AXISCHANDLE p){\n");
  +          writer.write("\taxiscDestroyStub(p);\n}\n");
   
  -            writer.write(
  -                "\n/*Methods corresponding to the web service methods*/\n");
  -            MethodInfo minfo;
  -            for (int i = 0; i < methods.size(); i++)
  +          writer.write("int get_" + classname + "_Status(AXISCHANDLE stub){\n");
  +          writer.write("\tAXISCHANDLE call = axiscGetCall(stub);\n");
  +          writer.write("\tif ( stub == NULL )\n");
  +          writer.write("\t\treturn AXISC_FAIL;\n");
  +          writer.write("\telse\n");
  +          writer.write("\t\treturn axiscGetStatusCall(call);\n");
  +          writer.write("}\n");
  +
  +          writer.write("\n/*Methods corresponding to the web service methods*/\n");
  +          MethodInfo minfo;
  +          for (int i = 0; i < methods.size(); i++)
               {
  -                minfo = (MethodInfo) methods.get(i);
  -                this.writeMethodInWrapper(minfo);
  -                writer.write("\n");
  +              minfo = (MethodInfo) methods.get(i);
  +              this.writeMethodInWrapper(minfo);
  +              writer.write("\n");
               }
  -
           }
  -        catch (IOException e)
  +      catch (IOException e)
           {
  -            throw new WrapperFault(e);
  +          throw new WrapperFault(e);
           }
  -    }
  +  }
   
  -    /**
  -     * This method genarate methods that wraps the each method of the service
  -     * @param MethodInfo
  -     * @throws IOException
  -     * @throws WrapperFault
  -     * 
  -     * @see org.apache.axis.wsdl.wsdl2ws.c.ClientStubWriter#writeMethodInWrapper(org.apache.axis.wsdl.wsdl2ws.info.MethodInfo) 
  -     */
  +  /**
  +   * This method genarate methods that wraps the each method of the service
  +   * @param MethodInfo
  +   * @throws IOException
  +   * @throws WrapperFault
  +   * 
  +   * @see org.apache.axis.wsdl.wsdl2ws.c.ClientStubWriter#writeMethodInWrapper(org.apache.axis.wsdl.wsdl2ws.info.MethodInfo) 
  +   */
   
       public void writeMethodInWrapper(MethodInfo minfo)
           throws WrapperFault, IOException
  @@ -118,22 +113,17 @@
           ParameterInfo returntype = null;
           int noOfOutParams = minfo.getOutputParameterTypes().size();
           if (0 == noOfOutParams)
  -        {
  +          {
               returntype = null;
  -        }
  +          }
  +        else if (1 == noOfOutParams)
  +          {
  +            returntype = (ParameterInfo)minfo.getOutputParameterTypes().iterator().next();
  +          }
           else
  -            if (1 == noOfOutParams)
  -            {
  -                returntype =
  -                    (ParameterInfo) minfo
  -                        .getOutputParameterTypes()
  -                        .iterator()
  -                        .next();
  -            }
  -            else
  -            {
  -                isAllTreatedAsOutParams = true;
  -            }
  +          {
  +            isAllTreatedAsOutParams = true;
  +          }
           Collection params = minfo.getInputParameterTypes();
           String methodName = minfo.getMethodname();
           Type retType = null;
  @@ -142,26 +132,40 @@
           boolean aretherearrayparams = false;
           String outparamType = null;
           if (returntype != null)
  -            retType =
  -                wscontext.getTypemap().getType(returntype.getSchemaName());
  +            retType = wscontext.getTypemap().getType(returntype.getSchemaName());
  +	
           if (retType != null)
           {
  -            outparamType = retType.getLanguageSpecificName();
  -            returntypeisarray = retType.isArray();
  +           if (retType.isSimpleType())
  +           {
  +            outparamType = CUtils.getclass4qname(retType.getBaseType());
  +           }
  +           else
  +           {
  +            outparamType = WrapperUtils.getClassNameFromParamInfoConsideringArrays(returntype,
  +                                                                                   wscontext);
  +            returntypeisarray = (outparamType.lastIndexOf("_Array") > 0);
  +           }
  +           returntypeisarray |= retType.isArray();
           }
           else
  -            if (returntype != null)
  -            {
  -                outparamType = returntype.getLangName();
  -            }
  +        {
  +           if (returntype != null)
  +           {
  +            outparamType = returntype.getLangName();
  +           }
  +        }
           if (returntype != null)
  -            returntypeissimple = CUtils.isSimpleType(outparamType);
  +        {
  +           returntypeissimple = CUtils.isSimpleType(outparamType);
  +        }
  +
           writer.write("\n/*\n");
           writer.write(
               " * This method wrap the service method " + methodName + "\n");
           writer.write(" */\n");
           //method signature
  -        String paramTypeName;
  +        String paraTypeName;
           boolean typeisarray = false;
           boolean typeissimple = false;
           Type type;
  @@ -169,24 +173,31 @@
           {
               writer.write("void");
           }
  +        else if (returntypeisarray
  +                 || (returntypeissimple
  +                     && (!returntype.isNillable ()
  +                         || CUtils.isPointerType(outparamType))))
  +          {
  +            writer.write (outparamType);
  +          }
  +        else if (outparamType.lastIndexOf ("*") > 0)
  +          {
  +            writer.write (outparamType);
  +          }
           else
  -            if (returntypeissimple || returntypeisarray)
  -            {
  -                writer.write(outparamType);
  -            }
  -            else
  -            {
  -                writer.write(outparamType + "*");
  -            }
  +          {			//for AnyType too
  +            writer.write (outparamType + "*");
  +          }
  +   
           writer.write(" " + methodName + "(AXISCHANDLE stub");
           ArrayList paramsB = (ArrayList) params;
           for (int i = 0; i < paramsB.size(); i++)
           {
  -            paramTypeName =
  +            paraTypeName =
                   WrapperUtils.getClassNameFromParamInfoConsideringArrays(
                       (ParameterInfo) paramsB.get(i),
                       wscontext);
  -            writer.write(", " + paramTypeName + " Value" + i);
  +            writer.write(", " + paraTypeName + " Value" + i);
               if ((type =
                   wscontext.getTypemap().getType(
                       ((ParameterInfo) paramsB.get(i)).getSchemaName()))
  @@ -238,18 +249,66 @@
                   writer.write(outparamType + " RetArray = {NULL, 0};\n");
               }
               else
  -                if (!returntypeissimple)
  -                {
  -                    writer.write(outparamType + "* pReturn = NULL;\n");
  -                    //for complex types
  -                }
  -                else
  -                {
  -                    //for simple types
  -                    writer.write(outparamType + " Ret;\n");
  -                    //TODO initialize return parameter appropriately.
  -                }
  +	    {
  +		if (!returntypeissimple)
  +		{		//for AnyType too
  +		    if (outparamType.lastIndexOf ("*") > 0)
  +		    {
  +			writer.write (outparamType + " pReturn = NULL;\n");
  +		    }
  +		    else
  +			writer.write (outparamType + "* pReturn = NULL;\n");
  +		    //for complex types
  +		}
  +		else
  +		{
  +		    //for simple types
  +		    if (returntype.isNillable ()
  +			&& !(CUtils.isPointerType(outparamType)))
  +		    {
  +			writer.write (outparamType + "* Ret = NULL;\n");
  +		    }
  +		    else
  +		    {
  +			String initValue = CUtils.getInitValue (outparamType);
  +			if (initValue != null)
  +			{
  +			    writer.write (outparamType + " Ret = " +
  +					  initValue + ";\n");
  +			}
  +			else
  +			{
  +			    if (outparamType.equals ("xsd__base64Binary")
  +				|| outparamType.equals ("xsd__hexBinary"))
  +			    {
  +				writer.write (outparamType + " Ret;\n");
  +				writer.write ("\tRet.__ptr = NULL;\n");
  +				writer.write ("\tRet.__size = 0;\n");
  +			    }
  +			    else
  +			    {
  +				if (outparamType.equals ("xsd__dateTime")
  +				    || outparamType.equals ("xsd__date")
  +				    || outparamType.equals ("xsd__time"))
  +				{
  +				    writer.write (outparamType + " Ret;\n");
  +				    writer.write ("\tmemset(&Ret,0,sizeof(" +
  +						  outparamType + "));\n");
  +				}
  +				else
  +				{
  +				    writer.write (outparamType + " Ret;\n");
  +				}
  +			    }
  +			}
  +		    }
  +		}
  +		//TODO initialize return parameter appropriately.
  +	    }
           }
  +        writer.write ("\tconst char* pcCmplxFaultName;\n");
  +        writer.write ("\tpcCmplxFaultName = NULL;\n");
  +
           writer.write(
               "\t/* Following will establish the connections with the server too */\n");
           writer.write(
  @@ -282,6 +341,12 @@
                   + "\", \""
                   + minfo.getInputMessage().getNamespaceURI()
                   + "\");\n");
  +
  +        // TODO add attributes to soap method
  +
  +
  +        // TODO new calls from stub base
  +          
           for (int i = 0; i < paramsB.size(); i++)
           {
               ParameterInfo param = (ParameterInfo) paramsB.get(i);
  @@ -290,20 +355,31 @@
               {
                   if (type.isSimpleType())
                   { //schema defined simpleType possibly with restrictions
  -                    paramTypeName = CUtils.getclass4qname(type.getBaseType());
  +                    paraTypeName = CUtils.getclass4qname(type.getBaseType());
                   }
                   else
                   {
  -                    paramTypeName = type.getLanguageSpecificName();
  +			paraTypeName = type.getLanguageSpecificName ();
  +			if (CUtils.isSimpleType (paraTypeName))
  +			    paraTypeName =
  +				WrapperUtils.
  +				getClassNameFromParamInfoConsideringArrays
  +				(param,
  +				 //returntype,
  +				 wscontext);
  +			typeisarray =
  +			    (paraTypeName.lastIndexOf ("_Array") > 0);
  +			if (!typeisarray)
  +			    paraTypeName = type.getLanguageSpecificName ();
                   }
  -                typeisarray = type.isArray();
  +                typeisarray |= type.isArray();
               }
               else
               {
  -                paramTypeName = param.getLangName();
  +                paraTypeName = param.getLangName();
                   typeisarray = false;
               }
  -            typeissimple = CUtils.isSimpleType(paramTypeName);
  +            typeissimple = CUtils.isSimpleType(paraTypeName);
               if (typeisarray)
               {
                   //arrays
  @@ -326,64 +402,69 @@
                   else
                   {
                       containedType = qname.getLocalPart();
  -                    writer.write(
  -                        "\taxiscAddCmplxArrayParameterCall(call, ");
  -                    writer.write(
  -                        "(Axisc_Array*)(&Value"
  -                            + i
  -                            + "), (void*)Axis_Serialize_"
  -                            + containedType
  -                            + ", (void*)Axis_Delete_"
  -                            + containedType
  -                            + ", (void*) Axis_GetSize_"
  -                            + containedType
  -                            + ", \""
  -                            + param.getElementNameAsString()
  -                            + "\", Axis_URI_"
  -                            + containedType);
  -                }
  -            }
  -            else
  -                if (typeissimple)
  -                {
  -                    //for simple types	
  -                    writer.write(
  -                        "\taxiscAddParameterCall(call, ");
  -                    writer.write(
  -                        "(void*)&Value"
  -                            + i
  -                            + ", \""
  -                            + param.getElementNameAsString()
  -                            + "\", "
  -                            + CUtils.getXSDTypeForBasicType(paramTypeName));
  -                }
  +                    writer.write("\taxiscAddCmplxArrayParameterCall(call, ");
  +                    writer.write("(Axisc_Array*)(&Value"
  +                                 + i
  +                                 + "), (void*)Axis_Serialize_"
  +                                 + containedType
  +                                 + ", (void*)Axis_Delete_"
  +                                 + containedType
  +                                 + ", (void*) Axis_GetSize_"
  +                                 + containedType
  +                                 + ", \""
  +                                 + param.getElementNameAsString()
  +                                 + "\", Axis_URI_"
  +                                 + containedType);
  +                }
  +            }
  +            else if (typeissimple)
  +              {
  +                //for simple types	
  +                if (param.isNillable ()
  +                    || CUtils.isPointerType(paraTypeName))
  +                  {
  +                    writer.write( "\taxiscAddParameterCall(call, ");
  +                    writer.write( "(void*)Value"
  +                                  + i
  +                                  + ", \""
  +                                  + param.getElementNameAsString()
  +                                  + "\", "
  +                                  + CUtils.getXSDTypeForBasicType(paraTypeName));
  +                  }
                   else
  -                    if (param.isAnyType())
  -                    {
  -                        //for anyTtype 
  -                        writer.write(
  -                            "\taxiscAddAnyObjectCall(call, Value"
  -                                + i);
  -                    }
  -                    else
  -                    {
  -                        //for complex types 
  -                        writer.write(
  -                            "\taxiscAddCmplxParameterCall(call, ");
  -                        writer.write(
  -                            "Value"
  +                  {
  +                    writer.write( "\taxiscAddParameterCall(call, ");
  +                    writer.write( "(void*)&Value"
  +                                  + i
  +                                  + ", \""
  +                                  + param.getElementNameAsString()
  +                                  + "\", "
  +                                  + CUtils.getXSDTypeForBasicType(paraTypeName));
  +                  }
  +              }
  +            else if (param.isAnyType())
  +              {
  +                //for anyTtype 
  +                writer.write("\taxiscAddAnyObjectCall(call, Value" + i);
  +              }
  +            else
  +              {
  +                //for complex types 
  +                writer.write( "\taxiscAddCmplxParameterCall(call, ");
  +                writer.write( "Value"
                                   + i
                                   + ", (void*)Axis_Serialize_"
  -                                + paramTypeName
  +                                + paraTypeName
                                   + ", (void*)Axis_Delete_"
  -                                + paramTypeName
  +                                + paraTypeName
                                   + ", \""
                                   + param.getElementNameAsString()
                                   + "\", Axis_URI_"
  -                                + paramTypeName);
  -                    }
  +                                + paraTypeName);
  +              }
               writer.write(");\n");
  -        }
  +          }
  +        
           writer.write(
               "\tif (AXISC_SUCCESS == axiscInvokeCall(call))\n\t{\n");
           writer.write(
  @@ -422,7 +503,14 @@
                   }
                   typeissimple = CUtils.isSimpleType(currentParaType);
   
  -                currentParamName = "*OutValue" + i;
  +                //Chinthana:
  +                //Changes have done for handle AXIS_OUT_PARAM Types.
  +                if (CUtils.isPointerType(currentParaType))
  +                   currentParamName = "*OutValue" + i;
  +                else
  +                   currentParamName = "OutValue" + i;
  +                //10/05/2005.................................................
  +                
                   // Some code need to be merged as we have some duplicated in coding here.
                   if (typeisarray)
                   {
  @@ -431,121 +519,124 @@
                       if (CUtils.isSimpleType(qname))
                       {
                           containedType = CUtils.getclass4qname(qname);
  -                        writer.write(
  -                            "\t\t\tarray = axiscGetBasicArrayCall(call, "
  -                                + CUtils.getXSDTypeForBasicType(containedType)
  -                                + ", \""
  -                                + currentType.getElementNameAsString()
  -                                + "\", 0);\n");
  -                        writer.write(
  -                            "\t\t\tmemcpy(OutValue"
  -                                + i
  -                                + ", &array, sizeof(Axisc_Array));\n");
  +                        writer.write("\t\t\tarray = axiscGetBasicArrayCall(call, "
  +                                     + CUtils.getXSDTypeForBasicType(containedType)
  +                                     + ", \""
  +                                     + currentType.getElementNameAsString()
  +                                     + "\", 0);\n");
  +                        writer.write( "\t\t\tmemcpy(OutValue"
  +                                      + i
  +                                      + ", &array, sizeof(Axisc_Array));\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");
  -                        writer.write(
  -                            "\t\t\tmemcpy(OutValue"
  -                                + i
  -                                + ", &array, sizeof(Axisc_Array));\n");
  +                        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");
  +                        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())
  +                  {
  +                    //for anyTtype 
  +                    writer.write( "\t\t\t"
  +                                  + currentParamName
  +                                  + " = ("
  +                                  + currentParaType
  +                                  + "*)axiscGetAnyObjectCall(call);\n");
  +                  }
                   else
  -                    if (typeissimple)
  -                    {
  -                        writer.write(
  -                            "\t\t\t"
  -                                + currentParamName
  -                                + " = "
  -                                + CUtils.getParameterGetValueMethodName(
  -                                    currentParaType,
  -                                    false)
  -                                + "(call, \""
  -                                + currentType.getElementNameAsString()
  -                                + "\", 0);\n");
  -                    }
  +                  {
  +                    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");                      }
                       else
  -                        if (currentType.isAnyType())
  -                        {
  -                            //for anyTtype 
  -                            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");
  -                        }
  -            }
  +                      {
  +                        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");
  +                      }
  +                  }
  +              }
               writer.write("\t\t}\n");
  -            writer.write(
  -                "\t}\n\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");
  -            }
  +            writer.write( "\t}\n\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");
  +          }
  +        else if (returntypeisarray)
  +          {
  +            QName qname = null;
  +            if (WrapperUtils.getArrayType (retType) != null)
  +                qname =
  +                  WrapperUtils.getArrayType (retType).getName ();
               else
  -                if (returntypeisarray)
  -                {
  -                    QName qname = WrapperUtils.getArrayType(retType).getName();
  -                    String containedType = null;
  -                    if (CUtils.isSimpleType(qname))
  -                    {
  -                        containedType = CUtils.getclass4qname(qname);
  -                        writer.write(
  -                            "\tarray = axiscGetBasicArrayCall(call, "
  +                qname = retType.getName ();
  +            String containedType = null;
  +            if (CUtils.isSimpleType(qname))
  +              {
  +                containedType = CUtils.getclass4qname(qname);
  +                writer.write( "\tarray = axiscGetBasicArrayCall(call, "
                                   + CUtils.getXSDTypeForBasicType(containedType)
                                   + ", \""
                                   + returntype.getElementNameAsString()
                                   + "\", 0);\n");
  -                        writer.write(
  -                            "\tmemcpy(&RetArray, &array, sizeof(Axisc_Array));\n");
  -                    }
  -                    else
  -                    {
  -                        containedType = qname.getLocalPart();
  -                        writer.write(
  -                            "\tarray = axiscGetCmplxArrayCall(call, (void*) Axis_DeSerialize_"
  +                writer.write("\tmemcpy(&RetArray, &array, sizeof(Axisc_Array));\n");
  +              }
  +            else
  +              {
  +                containedType = qname.getLocalPart();
  +                writer.write( "\tarray = axiscGetCmplxArrayCall(call, (void*) Axis_DeSerialize_"
                                   + containedType);
  -                        writer.write(
  -                            ", (void*) Axis_Create_"
  +                writer.write( ", (void*) Axis_Create_"
                                   + containedType
                                   + ", (void*) Axis_Delete_"
                                   + containedType
  @@ -556,61 +647,98 @@
                                   + "\", 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( "\tmemcpy(&RetArray, &array, sizeof(Axisc_Array));\n");
  +              }
  +            writer.write("\t\t}\n");
  +            writer.write( "\t}\n\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");
  +                  }
                   else
  -                    if (returntypeissimple)
  -                    {
  -                        writer.write(
  -                            "\t\t\tRet = "
  -                                + CUtils.getParameterGetValueMethodName(
  -                                    outparamType,
  -                                    false)
  -                                + "(call, \""
  -                                + returntype.getElementNameAsString()
  -                                + "\", 0);\n");
  -                        writer.write("\t\t}\n");
  -                        writer.write(
  -                            "\t}\n\taxiscUnInitializeCall(call);\n");
  -                        writer.write("\treturn Ret;\n");
  -                    }
  -                    else
  -                        if (returntype.isAnyType())
  -                        {
  -                            //for anyTtype 
  -                            writer.write(
  -                                "\t\t\tpReturn = ("
  -                                    + outparamType
  -                                    + "*)axiscGetAnyObjectCall(call);\n\t\t}\n");
  -                            writer.write(
  -                                "\t}\n\taxiscUnInitialize(call);\n");
  -                            writer.write("\treturn pReturn;\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}\n");
  -                            writer.write(
  -                                "\t}\n\taxiscUnInitializeCall(call);\n");
  -                            writer.write("\treturn pReturn;\n");
  -                        }
  +                  {
  +                    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");
  +                  }
  +              }
  +
  +            writer.write("\t\t}\n");
  +            writer.write("\t}\n\taxiscUnInitializeCall(call);\n");
  +            writer.write("\treturn Ret;\n");
  +          }
  +        else if (returntype.isAnyType())
  +          {
  +            //for anyTtype 
  +            writer.write( "\t\t\tpReturn = ("
  +                          + outparamType
  +                          + "*)axiscGetAnyObjectCall(call);\n\t\t}\n");
  +            writer.write( "\t}\n\taxiscUnInitialize(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");
  +              }
  +            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}\n");
  +            writer.write("\t}\n\taxiscUnInitializeCall(call);\n");
  +            writer.write("\treturn pReturn;\n");
  +          }
   
           //write end of method
           writer.write("}\n");
  @@ -643,32 +771,28 @@
               while (itr.hasNext())
               {
                   typeName = itr.next().toString();
  -                writer.write(
  -                    "extern int Axis_DeSerialize_"
  -                        + typeName
  -                        + "("
  -                        + typeName
  -                        + "* param, AXISCHANDLE pDZ);\n");
  -                writer.write(
  -                    "extern void* Axis_Create_"
  -                        + typeName
  -                        + "("
  -                        + typeName
  -                        + " *Obj, AxiscBool bArray, int nSize);\n");
  -                writer.write(
  -                    "extern void Axis_Delete_"
  -                        + typeName
  -                        + "("
  -                        + typeName
  -                        + "* param, AxiscBool bArray, int nSize);\n");
  -                writer.write(
  -                    "extern int Axis_Serialize_"
  -                        + typeName
  -                        + "("
  -                        + typeName
  -                        + "* param, AXISCHANDLE pSZ, AxiscBool bArray);\n");
  +                writer.write("extern int Axis_DeSerialize_"
  +                             + typeName
  +                             + "("
  +                             + typeName
  +                             + "* param, AXISCHANDLE pDZ);\n");
  +                writer.write("extern void* Axis_Create_"
  +                             + typeName
  +                             + "("
  +                             + typeName
  +                             + " *Obj, AxiscBool bArray, int nSize);\n");
  +                writer.write("extern void Axis_Delete_"
  +                             + typeName
  +                             + "("
  +                             + typeName
  +                             + "* param, AxiscBool bArray, int nSize);\n");
  +                writer.write("extern int Axis_Serialize_"
  +                             + typeName
  +                             + "("
  +                             + typeName
  +                             + "* param, AXISCHANDLE pSZ, AxiscBool bArray);\n");
                   writer.write("extern int Axis_GetSize_" + typeName + "();\n\n");
  -            }
  +              }
           }
           catch (IOException e)
           {