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 su...@apache.org on 2003/10/10 13:26:30 UTC

cvs commit: ws-axis/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp BeanParamWriter.java CPPUtils.java ClientStubWriter.java ParmHeaderFileWriter.java WrapWriter.java

susantha    2003/10/10 04:26:30

  Modified:    c/src/common IWrapperSoapSerializer.h
               c/src/soap SoapSerializer.cpp SoapSerializer.h
               c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp
                        BeanParamWriter.java CPPUtils.java
                        ClientStubWriter.java ParmHeaderFileWriter.java
                        WrapWriter.java
  Log:
  Completed server side wrappers/skeletons and client side stubs generation when there are arrays.
  
  Revision  Changes    Path
  1.11      +1 -0      ws-axis/c/src/common/IWrapperSoapSerializer.h
  
  Index: IWrapperSoapSerializer.h
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/src/common/IWrapperSoapSerializer.h,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- IWrapperSoapSerializer.h	10 Oct 2003 05:13:13 -0000	1.10
  +++ IWrapperSoapSerializer.h	10 Oct 2003 11:26:29 -0000	1.11
  @@ -93,6 +93,7 @@
   	virtual int AddOutputParam(const AxisChar* pchName, double dValue)=0;
   	virtual int AddOutputParam(const AxisChar* pchName, struct tm tValue)=0;
   	virtual int AddOutputParam(const AxisChar* pchName, const AxisChar* pStrValue)=0;
  +	virtual int AddOutputParam(const AxisChar* pchName, const string& sStrValue);
   	//for arrays
   	virtual int AddOutputParam(const AxisChar* pchName, const Axis_Array* pArray, void* pSZFunct, void* pDelFunct, void* pSizeFunct, const AxisChar* pchTypeName, const AxisChar* pchURI)=0;
   	virtual int AddOutputParam(const AxisChar* pchName, const Axis_Array* pArray, XSDTYPE nType)=0;
  
  
  
  1.26      +7 -0      ws-axis/c/src/soap/SoapSerializer.cpp
  
  Index: SoapSerializer.cpp
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/src/soap/SoapSerializer.cpp,v
  retrieving revision 1.25
  retrieving revision 1.26
  diff -u -r1.25 -r1.26
  --- SoapSerializer.cpp	10 Oct 2003 05:13:14 -0000	1.25
  +++ SoapSerializer.cpp	10 Oct 2003 11:26:29 -0000	1.26
  @@ -245,6 +245,13 @@
   	return AddOutputParamHelper(pchName, XSD_STRING, uValue);
   }
   
  +int SoapSerializer::AddOutputParam(const AxisChar* pchName, const string& sStrValue)
  +{
  +	uParamValue uValue;
  +	uValue.pStrValue = sStrValue.c_str();
  +	return AddOutputParamHelper(pchName, XSD_STRING, uValue);
  +}
  +
   int SoapSerializer::AddOutputParam(const AxisChar* pchName, const Axis_Array* pArray, XSDTYPE nType)
   {
   	IArrayBean* pAb = makeArrayBean(nType, (void*)(pArray->m_Array));
  
  
  
  1.21      +1 -0      ws-axis/c/src/soap/SoapSerializer.h
  
  Index: SoapSerializer.h
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/src/soap/SoapSerializer.h,v
  retrieving revision 1.20
  retrieving revision 1.21
  diff -u -r1.20 -r1.21
  --- SoapSerializer.h	10 Oct 2003 05:13:14 -0000	1.20
  +++ SoapSerializer.h	10 Oct 2003 11:26:29 -0000	1.21
  @@ -123,6 +123,7 @@
   	int AddOutputParam(const AxisChar* pchName, double dValue);
   	int AddOutputParam(const AxisChar* pchName, struct tm tValue);
   	int AddOutputParam(const AxisChar* pchName, const AxisChar* pStrValue);
  +	int AddOutputParam(const AxisChar* pchName, const string& sStrValue);
   	//for arrays of basic types
   	int AddOutputParam(const AxisChar* pchName, const Axis_Array* pArray, XSDTYPE nType);
   	//for arrays of complex types
  
  
  
  1.5       +30 -18    ws-axis/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/BeanParamWriter.java
  
  Index: BeanParamWriter.java
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/BeanParamWriter.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- BeanParamWriter.java	10 Oct 2003 05:13:14 -0000	1.4
  +++ BeanParamWriter.java	10 Oct 2003 11:26:29 -0000	1.5
  @@ -61,6 +61,8 @@
   package org.apache.axis.wsdl.wsdl2ws.cpp;
   
   import java.io.IOException;
  +import java.util.HashSet;
  +import java.util.Iterator;
   
   import javax.xml.namespace.QName;
   
  @@ -82,8 +84,29 @@
   	 */
   	protected void writeGlobalCodes()throws WrapperFault{
   		try{
  -		writer.write("static const AxisChar* Axis_URI_"+classname+" = \""+type.getName().getNamespaceURI()+"\";\n");
  -		writer.write("static const AxisChar* Axis_TypeName_"+classname+" = \""+type.getName().getLocalPart()+"\";\n\n");
  +		HashSet typeSet = new HashSet();
  +		String typeName;
  +		for(int i = 1; i< attribs.length;i++){
  +			if(!CPPUtils.isSimpleType(attribs[i][1])){
  +				Type memtype = wscontext.getTypemap().getType(type.getTypNameForAttribName(attribs[i][0]));
  +				if (memtype.isArray()){
  +					typeName = memtype.getTypNameForAttribName("item").getLocalPart();
  +				}else{
  +					typeName = attribs[i][1];
  +				}	
  +				typeSet.add(typeName);
  +			}
  +		}
  +		Iterator itr = typeSet.iterator();
  +		while(itr.hasNext())
  +		{
  +			typeName = itr.next().toString();
  +			writer.write("extern int Axis_DeSerialize_"+typeName+"("+typeName+"* param, IWrapperSoapDeSerializer *pDZ);\n");
  +			writer.write("extern void* Axis_Create_"+typeName+"(bool bArray = false, int nSize=0);\n");
  +			writer.write("extern void Axis_Delete_"+typeName+"("+typeName+"* param, bool bArray = false, int nSize=0);\n");
  +			writer.write("extern int Axis_Serialize_"+typeName+"("+typeName+"* param, IWrapperSoapSerializer& pSZ, bool bArray = false);\n");
  +			writer.write("extern int Axis_GetSize_"+typeName+"();\n\n");			
  +		}
   		writeSerializeGlobalMethod();
   		writeDeSerializeGlobalMethod();
   		writeCreateGlobalMethod();
  @@ -155,31 +178,20 @@
   			 return;
   		 }
   		writer.write("\tIParam* pParam;\n");		 
  -		if(CPPUtils.isSimpleType(attribs[0][1])){
  -			//if symple type
  -			writer.write("\tparam->"+attribs[0][0]+" = pDZ->GetParam()->"+CPPUtils.getParameterGetValueMethodName(attribs[0][1])+";\n");
  -		}else if((t = wscontext.getTypemap().getType(new QName(attribs[0][2],attribs[0][3])))!= null && t.isArray()){
  -			//if Array
  -		}else{
  -			//if complex type
  -			writer.write("\tpParam = pDZ->GetParam(); //get head param and do any validation if necessary.\n");
  -			writer.write("\tparam->"+attribs[0][0]+" = new "+attribs[0][1]+"();\n");
  -			writer.write("\tAxis_DeSerialize_"+attribs[0][1]+"(param->"+attribs[0][0]+", pDZ);\n");
  -		}
  -		for(int i = 1; i< attribs.length;i++){
  +		for(int i = 0; i< attribs.length;i++){
   			if(CPPUtils.isSimpleType(attribs[i][1])){
   				//if symple type
   				writer.write("\tparam->"+attribs[i][0]+" = pDZ->GetParam()->"+CPPUtils.getParameterGetValueMethodName(attribs[i][1])+";\n");
   			}else if((t = wscontext.getTypemap().getType(new QName(attribs[i][2],attribs[i][3])))!= null && t.isArray()){
   				//if Array
   				String arrayType = t.getTypNameForAttribName("item").getLocalPart();
  -				writer.write("\tpParam = pIWSDZ->GetParam(); //now we know that this is an array.\n");
  +				writer.write("\tpParam = pDZ->GetParam(); //now we know that this is an array.\n");
   				writer.write("\tparam->"+attribs[i][0]+".m_Size = pParam->GetArraySize();\n");
   				writer.write("\tif (param->"+attribs[i][0]+".m_Size > 0)\n");
   				writer.write("\t\tparam->"+attribs[i][0]+".m_Array = new "+arrayType+"[param->"+attribs[i][0]+".m_Size];\n");
   				writer.write("\telse\n\t\treturn FAIL; //CF_ZERO_ARRAY_SIZE_ERROR\n");
   				writer.write("\tpParam->SetArrayElements((void*)(param->"+attribs[i][0]+".m_Array), (AXIS_DESERIALIZE_FUNCT)Axis_DeSerialize_"+arrayType+", (AXIS_OBJECT_DELETE_FUNCT)Axis_Delete_"+arrayType+", (AXIS_OBJECT_SIZE_FUNCT)Axis_GetSize_"+arrayType+");\n");
  -				writer.write("\tpIWSDZ->Deserialize(pParam,0);\n");				
  +				writer.write("\tpDZ->Deserialize(pParam,0);\n");				
   			}else{
   				//if complex type
   				writer.write("\tpParam = pDZ->GetParam(); //get head param and do any validation if necessary.\n");
  @@ -241,9 +253,9 @@
   				Type memtype = wscontext.getTypemap().getType(type.getTypNameForAttribName(attribs[i][0]));
   				if (memtype.isArray()){
   					String containedType = memtype.getTypNameForAttribName("item").getLocalPart();
  -					writer.write("\t\tAxis_Delete_"+containedType+"(p->"+attribs[i][0]+".m_Array, true, p->"+attribs[i][0]+".m_Size);\n");
  +					writer.write("\t\tAxis_Delete_"+containedType+"(param->"+attribs[i][0]+".m_Array, true, param->"+attribs[i][0]+".m_Size);\n");
   				}else{
  -					writer.write("\t\tAxis_Delete_"+attribs[i][1]+"(p->"+attribs[i][0]+");\n");
  +					writer.write("\t\tAxis_Delete_"+attribs[i][1]+"(param->"+attribs[i][0]+");\n");
   				}
   			}
   		}			
  
  
  
  1.4       +2 -0      ws-axis/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/CPPUtils.java
  
  Index: CPPUtils.java
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/CPPUtils.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- CPPUtils.java	10 Oct 2003 05:13:14 -0000	1.3
  +++ CPPUtils.java	10 Oct 2003 11:26:29 -0000	1.4
  @@ -88,6 +88,7 @@
   		 class2QNamemap.put("char", new QName(WrapperConstants.SCHEMA_NAMESPACE, "char"));
   		 class2QNamemap.put("short", new QName(WrapperConstants.SCHEMA_NAMESPACE, "short"));
   		 class2QNamemap.put("string", new QName(WrapperConstants.SCHEMA_NAMESPACE, "string"));
  +		 class2QNamemap.put("string", new QName(WrapperConstants.SCHEMA_NAMESPACE, "base64Binary"));
   
   		 qname2classmap.put(new QName(WrapperConstants.SCHEMA_NAMESPACE, "int"), "int");
   		 qname2classmap.put(new QName(WrapperConstants.SCHEMA_NAMESPACE, "byte"), "unsigned char");
  @@ -98,6 +99,7 @@
   		 qname2classmap.put(new QName(WrapperConstants.SCHEMA_NAMESPACE, "char"), "char");
   		 qname2classmap.put(new QName(WrapperConstants.SCHEMA_NAMESPACE, "short"), "short");
   		 qname2classmap.put(new QName(WrapperConstants.SCHEMA_NAMESPACE, "string"), "string");
  +		 qname2classmap.put(new QName(WrapperConstants.SCHEMA_NAMESPACE, "base64Binary"), "string");
   	}
   	public static boolean isSimpleType(String name){
   		if(class2QNamemap.containsKey(name))
  
  
  
  1.6       +0 -4      ws-axis/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/ClientStubWriter.java
  
  Index: ClientStubWriter.java
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/ClientStubWriter.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- ClientStubWriter.java	2 Oct 2003 08:45:23 -0000	1.5
  +++ ClientStubWriter.java	10 Oct 2003 11:26:29 -0000	1.6
  @@ -284,10 +284,6 @@
   				writer.write("extern void Axis_Delete_"+typeName+"("+typeName+"* param, bool bArray = false, int nSize=0);\n");
   				writer.write("extern int Axis_Serialize_"+typeName+"("+typeName+"* param, IWrapperSoapSerializer& pSZ, bool bArray = false);\n");
   				writer.write("extern int Axis_GetSize_"+typeName+"("+typeName+"* param);\n\n");
  -				//Local name and the URI for the type
  -				writer.write("//Local name and the URI for the type\n");
  -				writer.write("static const AxisChar* Axis_URI_"+typeName+" = " + "\"http://www.opensource.lk/" + typeName + "\";\n");
  -				writer.write("static const AxisChar* Axis_TypeName_"+typeName+" = \"" +typeName+"\";\n\n");
   			}
   		} catch (IOException e) {
   			throw new WrapperFault(e);
  
  
  
  1.5       +4 -1      ws-axis/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/ParmHeaderFileWriter.java
  
  Index: ParmHeaderFileWriter.java
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/ParmHeaderFileWriter.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- ParmHeaderFileWriter.java	10 Oct 2003 05:13:14 -0000	1.4
  +++ ParmHeaderFileWriter.java	10 Oct 2003 11:26:29 -0000	1.5
  @@ -84,7 +84,6 @@
   			this.writer.write("#if !defined(__"+classname.toUpperCase()+"_"+getFileType().toUpperCase()+"_H__INCLUDED_)\n");
   			this.writer.write("#define __"+classname.toUpperCase()+"_"+getFileType().toUpperCase()+"_H__INCLUDED_\n\n");
   			writePreprocssorStatements();
  -			this.writer.write("\n");
   			this.writer.write("class "+classname+"\n{\n");
   			writeAttributes();
   			this.writer.write("};\n\n");
  @@ -141,6 +140,10 @@
   				}
   			}
   		}
  +		//Local name and the URI for the type
  +		writer.write("//Local name and the URI for the type\n");
  +		writer.write("static const char* Axis_URI_"+classname+" = \""+type.getName().getNamespaceURI()+"\";\n");
  +		writer.write("static const char* Axis_TypeName_"+classname+" = \""+type.getName().getLocalPart()+"\";\n\n");
   	  }catch(IOException e){
   	  	throw new WrapperFault(e);
   	  }
  
  
  
  1.5       +22 -37    ws-axis/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/WrapWriter.java
  
  Index: WrapWriter.java
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/WrapWriter.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- WrapWriter.java	7 Oct 2003 06:47:06 -0000	1.4
  +++ WrapWriter.java	10 Oct 2003 11:26:29 -0000	1.5
  @@ -137,7 +137,6 @@
   			writer.write("int "+classname+"::Init()\n{\n\treturn SUCCESS;\n}\n\n");
   			writer.write("int "+classname+"::Fini()\n{\n\treturn SUCCESS;\n}\n\n");
   			writeInvoke();
  -			writeSetSoapMethod();
   			writer.write("\n//Methods corresponding to the web service methods\n");
   			MethodInfo minfo;
   			for (int i = 0; i < methods.size(); i++) {
  @@ -199,20 +198,6 @@
   		writer.write("}\n\n");
   	}
   
  -	private void writeSetSoapMethod() throws IOException {
  -		writer.write("\n/////////////////////////////////////////////////////////////////\n");
  -		writer.write("// This method sets the method element of the Serializer response \n");
  -		writer.write("//////////////////////////////////////////////////////////////////\n");
  -		writer.write("int "+classname+"::SetResponseMethod(IMessageData* mc, const AxisChar* name)\n{\n");
  -		writer.write("\tIWrapperSoapSerializer* pIWSSZ = NULL;\n");
  -		writer.write("\tmc->getSoapSerializer(&pIWSSZ);\n");
  -		writer.write("\tif (!pIWSSZ) return FAIL;\n");
  -		writer.write("\tISoapMethod* pMethod = pIWSSZ->createSoapMethod();\n");
  -		writer.write("\tpMethod->setLocalName(name);\n");
  -		writer.write("\tpMethod->setPrefix(pIWSSZ->getNewNamespacePrefix());\n");
  -		writer.write("\tpMethod->setUri(\"http://www.opensource.lk/"+CPPUtils.getWebServiceNameFromWrapperName(classname)+"\");\n");
  -		writer.write("\treturn SUCCESS;\n}\n");
  -	}
   	/**
   	 * This method genarate methods that wraps the each method of the service
   	 * @param methodName
  @@ -234,8 +219,7 @@
   		writer.write("\tIWrapperSoapDeSerializer *pIWSDZ = NULL;\n");
   		writer.write("\tmc->getSoapDeSerializer(&pIWSDZ);\n");
   		writer.write("\tif (!pIWSDZ) return FAIL;\n");
  -		writer.write("\tSetResponseMethod(mc, \""+methodName+"Response\");\n");
  -
  +		writer.write("\tpIWSSZ->createSoapMethod(\""+methodName+"Response\", pIWSSZ->getNewNamespacePrefix(), \""+wscontext.getWrapInfo().getTargetNameSpaceOfWSDL()+"\");\n");
   		//create and populate variables for each parameter
   		String paraTypeName;
   		ArrayList paramsB = new ArrayList(params);
  @@ -247,11 +231,14 @@
   			if((CPPUtils.isSimpleType(((ParameterInfo)paramsB.get(i)).getLangName()))){
   				//for simple types	
   				writer.write("\t"+paraTypeName+" v"+i+" = param"+i+"->"+CPPUtils.getParameterGetValueMethodName(paraTypeName)+";\n");
  -			}else if((type = this.wscontext.getTypemap().getType(((ParameterInfo)paramsB.get(i)).getSchemaName())) != null 
  -						&& type.isArray()){
  -            	//TODO for Array types				
  -				//String ContentparaTypeName = WrapperUtils.getParameterName4ParamInfo((ParameterInfo)paramsB.get(i),wscontext);
  -			
  +			}else if((type = this.wscontext.getTypemap().getType(((ParameterInfo)paramsB.get(i)).getSchemaName())) != null && type.isArray()){
  +				String containedType = type.getTypNameForAttribName("item").getLocalPart();
  +				writer.write("\t"+paraTypeName+" v"+i+";\n");
  +				writer.write("\tv"+i+".m_Size = param"+i+"->GetArraySize();\n");
  +				writer.write("\tif ("+"v"+i+".m_Size > 0)\n");
  +				writer.write("\t\tv"+i+".m_Array = new "+containedType+"[v"+i+".m_Size];\n\telse\n\t\treturn FAIL; //CF_ZERO_ARRAY_SIZE_ERROR\n");
  +				writer.write("param"+i+"->SetArrayElements((void*)(v"+i+".m_Array), (AXIS_DESERIALIZE_FUNCT)Axis_DeSerialize_"+containedType+", (AXIS_OBJECT_DELETE_FUNCT)Axis_Delete_"+containedType+", (AXIS_OBJECT_SIZE_FUNCT)Axis_GetSize_"+containedType+");\n");
  +				writer.write("pIWSDZ->Deserialize(param"+i+",0);\n");			
   			}else{
   				//for complex types 
   				writer.write("\t"+paraTypeName+" *v"+i+" = new "+paraTypeName+"();\n");
  @@ -263,31 +250,29 @@
   		if(!(outparam == null ||outparam.equals("void"))){				
   			boolean isSimpleType = CPPUtils.isSimpleType(outparam);
   			boolean isArray = returntype.getType().isArray();
  -			// -------- I dont understand why following lines does-Susantha -------//
  -			Type type;
  -			if ((type = this.wscontext.getTypemap().getType(returntype.getSchemaName())) != null ){
  -				if (isArray = type.isArray()){
  -					outparam = type.getTypNameForAttribName("item")+"[]";
  -				}
  -			}	
  -			// -------------------------------------------------------------------//
  +			Type type = this.wscontext.getTypemap().getType(returntype.getSchemaName());
   			/* Invoke the service when return type not void */
  -			writer.write("\t"+outparam+(isSimpleType?" ":" *")+ "ret = "+"pWs->"+methodName+"(");
  +			writer.write("\t"+outparam+((isSimpleType || isArray)?" ":" *")+ "ret = "+"pWs->"+methodName+"(");
   			for (int i = 0; i <  paramsB.size() - 1; i++)
  -					writer.write("v" + i + ",");
  +				writer.write("v" + i + ",");
   			writer.write("v" + ( paramsB.size() - 1));					
   			writer.write(");\n");					
   			/* set the result */
   			if (isSimpleType){
  -				writer.write("\tIParam *pRetParam = pIWSSZ->AddOutputParam(ret);\n");
  +				writer.write("\treturn pIWSSZ->AddOutputParam(\""+methodName+"Return\", ret);\n");
   			}else if(isArray){
  -				//TODO array type
  +				String containedType = type.getTypNameForAttribName("item").getLocalPart();
  +				if (CPPUtils.isSimpleType(containedType)){ //array of basic types
  +				}
  +				else{ //array of complex types
  +					writer.write("return pIWSSZ->AddOutputParam(\""+methodName+"Return\", (Axis_Array*)(&ret),"+ 
  +					"(void*) Axis_Serialize_"+containedType+", (void*) Axis_Delete_"+containedType+", (void*) Axis_GetSize_"+containedType+", Axis_TypeName_"+containedType+", Axis_URI_"+containedType+");\n");
  +				}
   			}
   			else{
   				//complex type
  -				writer.write("\tIParam *pRetParam = pIWSSZ->AddOutputParam(ret, (void*)Axis_Serialize_"+outparam+", (void*)Axis_Delete_"+outparam+");\n");
  +				writer.write("\treturn pIWSSZ->AddOutputParam(\""+methodName+"Return\", ret, (void*)Axis_Serialize_"+outparam+", (void*)Axis_Delete_"+outparam+");\n");
   			}
  -			writer.write("\tpRetParam->SetName(\""+methodName+"Return\");\n");
   			writer.write("\treturn SUCCESS;\n");
   		}else{//method does not return anything
   			/* Invoke the service when return type is void */
  @@ -314,7 +299,7 @@
   				writer.write("extern void* Axis_Create_"+typeName+"(bool bArray = false, int nSize=0);\n");
   				writer.write("extern void Axis_Delete_"+typeName+"("+typeName+"* param, bool bArray = false, int nSize=0);\n");
   				writer.write("extern int Axis_Serialize_"+typeName+"("+typeName+"* param, IWrapperSoapSerializer& pSZ, bool bArray = false);\n");
  -				writer.write("extern int Axis_GetSize_"+typeName+"("+typeName+"* param);\n\n");
  +				writer.write("extern int Axis_GetSize_"+typeName+"();\n\n");
   			}
   		} catch (IOException e) {
   			throw new WrapperFault(e);