| /* |
| * Copyright 2003-2004 The Apache Software Foundation. |
| // (c) Copyright IBM Corp. 2004, 2005 All Rights Reserved |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package org.apache.axis.wsdl.wsdl2ws.cpp; |
| |
| import java.io.IOException; |
| import java.util.ArrayList; |
| import java.util.Collection; |
| import java.util.Iterator; |
| |
| import javax.xml.namespace.QName; |
| |
| import org.apache.axis.wsdl.wsdl2ws.CUtils; |
| import org.apache.axis.wsdl.wsdl2ws.WrapperFault; |
| import org.apache.axis.wsdl.wsdl2ws.info.FaultInfo; |
| import org.apache.axis.wsdl.wsdl2ws.info.MethodInfo; |
| import org.apache.axis.wsdl.wsdl2ws.info.ParameterInfo; |
| import org.apache.axis.wsdl.wsdl2ws.info.Type; |
| import org.apache.axis.wsdl.wsdl2ws.info.WebServiceContext; |
| |
| public class WrapWriter extends CPPClassWriter |
| { |
| private ArrayList methods; |
| public WrapWriter(WebServiceContext wscontext) throws WrapperFault |
| { |
| super(wscontext.getServiceInfo().getServicename() + CUtils.WRAPPER_NAME_APPENDER); |
| this.wscontext = wscontext; |
| this.methods = wscontext.getServiceInfo().getMethods(); |
| } |
| protected void writeClassComment() throws WrapperFault |
| { |
| try |
| { |
| c_writer.write("/*\n"); |
| c_writer.write(" * Copyright 2003-2006 The Apache Software Foundation.\n\n"); |
| c_writer.write(" *\n"); |
| c_writer.write(" * Licensed under the Apache License, Version 2.0 (the \"License\");\n"); |
| c_writer.write(" * you may not use this file except in compliance with the License.\n"); |
| c_writer.write(" * You may obtain a copy of the License at\n"); |
| c_writer.write(" *\n"); |
| c_writer.write(" *\t\thttp://www.apache.org/licenses/LICENSE-2.0\n"); |
| c_writer.write(" *\n"); |
| c_writer.write(" * Unless required by applicable law or agreed to in writing, software\n"); |
| c_writer.write(" * distributed under the License is distributed on an \"AS IS\" BASIS,\n"); |
| c_writer.write(" * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n"); |
| c_writer.write(" * See the License for the specific language governing permissions and\n"); |
| c_writer.write(" * limitations under the License.\n"); |
| c_writer.write(" *\n"); |
| c_writer.write(" * This file was auto-generated by the Axis C++ Web Service Generator (WSDL2Ws)\n"); |
| c_writer.write(" * This file contains Web Service Wrapper implementations\n"); |
| c_writer.write(" */\n\n"); |
| } |
| catch (IOException e) |
| { |
| throw new WrapperFault(e); |
| } |
| } |
| |
| /* (non-Javadoc) |
| * @see org.apache.axis.wsdl.wsdl2ws.cpp.HeaderFileWriter#writeConstructors() |
| */ |
| protected void writeConstructors() throws WrapperFault |
| { |
| try |
| { |
| c_writer.write(c_classname + "::\n" + c_classname + "()\n{\n"); |
| c_writer.write( |
| "\tpWs = new " |
| + CUtils.getWebServiceNameFromWrapperName(c_classname) |
| + "();\n"); |
| c_writer.write("}\n\n"); |
| } |
| catch (IOException e) |
| { |
| throw new WrapperFault(e); |
| } |
| } |
| |
| /* (non-Javadoc) |
| * @see org.apache.axis.wsdl.wsdl2ws.cpp.HeaderFileWriter#writeDistructors() |
| */ |
| protected void writeDestructors() throws WrapperFault |
| { |
| try |
| { |
| c_writer.write( |
| c_classname + "::\n~" + c_classname + "()\n{\n\tdelete pWs;\n}\n\n"); |
| } |
| catch (IOException e) |
| { |
| throw new WrapperFault(e); |
| } |
| } |
| |
| /* (non-Javadoc) |
| * @see org.apache.axis.wsdl.wsdl2ws.cpp.HeaderFileWriter#writeMethods() |
| */ |
| protected void writeMethods() throws WrapperFault |
| { |
| try |
| { |
| CUtils.printMethodComment(c_writer, "This method handles faults."); |
| |
| |
| c_writer.write( |
| "void " |
| + c_classname |
| + "::\nonFault(void *pMsg)\n{" |
| + "\n\tpWs->onFault();\n}\n\n"); |
| |
| writeInvoke(); |
| |
| MethodInfo minfo; |
| for (int i = 0; i < methods.size(); i++) |
| { |
| minfo = (MethodInfo) methods.get(i); |
| this.writeMethodInWrapper(minfo); |
| c_writer.write("\n"); |
| } |
| |
| } |
| catch (IOException e) |
| { |
| throw new WrapperFault(e); |
| } |
| } |
| |
| /* (non-Javadoc) |
| * @see org.apache.axis.wsdl.wsdl2ws.cpp.HeaderFileWriter#writePreprocssorStatements() |
| */ |
| protected void writePreprocessorStatements() throws WrapperFault |
| { |
| try |
| { |
| c_writer.write( |
| "#include \"" |
| + c_classname |
| + CUtils.getHeaderFileExtension() |
| + "\"\n\n"); |
| } |
| catch (IOException e) |
| { |
| throw new WrapperFault(e); |
| } |
| } |
| |
| /** |
| * write the invoke method |
| * @throws IOException |
| */ |
| private void writeInvoke() throws IOException |
| { |
| CUtils.printMethodComment(c_writer, "This method invokes the right service method."); |
| |
| c_writer.write("int " + c_classname + "::\ninvoke(void *pMsg)\n{\n"); |
| c_writer.write("\tIMessageData* mc = (IMessageData*)pMsg;\n"); |
| c_writer.write("\tconst AxisChar *method = mc->getOperationName();\n"); |
| |
| //if no methods in the service simply return |
| if (methods.size() != 0) |
| { |
| MethodInfo minfo = (MethodInfo) methods.get(0); |
| //if conditions (if parts) |
| c_writer.write( |
| "\tif( (0 == strcmp(method, \"" + minfo.getInputMessage().getLocalPart() + "\")) || (0 == strcmp(method, \"" + minfo.getMethodname() + "\")) )\n"); |
| c_writer.write("\t\treturn " + minfo.getSanitizedMethodName() + "(mc);\n"); |
| //(else if parts) |
| if (methods.size() > 1) |
| { |
| for (int i = 1; i < methods.size(); i++) |
| { |
| minfo = (MethodInfo) methods.get(i); |
| c_writer.write( |
| "\telse if ( (0 == strcmp(method, \"" + minfo.getInputMessage().getLocalPart() + "\")) || (0 == strcmp(method, \"" + minfo.getMethodname() + "\")) )\n"); |
| c_writer.write("\t\treturn " + minfo.getSanitizedMethodName() + "(mc);\n"); |
| } |
| } |
| //(else part) |
| c_writer.write("\telse return AXIS_FAIL;\n"); |
| } |
| //end of method |
| c_writer.write("}\n\n"); |
| } |
| |
| /** |
| * This method genarate methods that wraps the each method of the service |
| * @param methodName |
| * @param params |
| * @param outparam |
| * @throws IOException |
| */ |
| |
| public void writeMethodInWrapper(MethodInfo minfo) |
| throws WrapperFault, IOException |
| { |
| Type type; |
| boolean isAllTreatedAsOutParams = false; |
| ParameterInfo returntype = null; |
| int noOfOutParams = minfo.getOutputParameterTypes().size(); |
| if (0 == noOfOutParams) |
| { |
| returntype = null; |
| } |
| else |
| { |
| if (1 == noOfOutParams) |
| { |
| returntype = |
| (ParameterInfo) minfo |
| .getOutputParameterTypes() |
| .iterator() |
| .next(); |
| } |
| else |
| { |
| isAllTreatedAsOutParams = true; |
| } |
| } |
| Collection params = minfo.getInputParameterTypes(); |
| Type retType = null; |
| String outparamType = null; |
| String outparamTypeName = null; |
| boolean returntypeissimple = false; |
| boolean returntypeisarray = false; |
| if (returntype != null) |
| { |
| outparamTypeName = |
| CUtils.getClassNameFromParamInfoConsideringArrays( |
| returntype, |
| wscontext); |
| retType = |
| wscontext.getTypemap().getType(returntype.getSchemaName()); |
| if (retType != null) |
| { |
| returntypeisarray = retType.isArray(); |
| if (CUtils.isSimpleType(retType.getLanguageSpecificName())) |
| { |
| returntypeissimple = true; |
| } |
| } |
| } |
| c_writer.write("\n/*\n"); |
| c_writer.write(" * This method wrap the service method \n"); |
| c_writer.write(" */\n"); |
| //method signature |
| c_writer.write( |
| "int " + c_classname + "::\n" + minfo.getSanitizedMethodName() + "(void* pMsg)\n{\n"); |
| c_writer.write("\tIMessageData* mc = (IMessageData*)pMsg;\n"); |
| c_writer.write("\tint nStatus;\n"); |
| c_writer.write("\tIWrapperSoapSerializer* pIWSSZ = NULL;\n"); |
| c_writer.write("\tmc->getSoapSerializer(&pIWSSZ);\n"); |
| c_writer.write("\tif (!pIWSSZ)\n"); |
| c_writer.write("\t{\n"); |
| c_writer.write("\t\treturn AXIS_FAIL;\n"); |
| c_writer.write("\t}\n"); |
| c_writer.write("\tIWrapperSoapDeSerializer* pIWSDZ = NULL;\n"); |
| c_writer.write("\tmc->getSoapDeSerializer(&pIWSDZ);\n"); |
| c_writer.write("\tif (!pIWSDZ)\n"); |
| c_writer.write("\t{\n"); |
| c_writer.write("\t\treturn AXIS_FAIL;\n"); |
| c_writer.write("\t}\n"); |
| c_writer.write("\t/* check whether we have got correct message */\n"); |
| c_writer.write( |
| "\tif (AXIS_SUCCESS != pIWSDZ->checkMessageBody(\"" |
| + minfo.getMethodname() |
| + "\", \"" |
| + wscontext.getWrapperInfo().getTargetNameSpaceOfWSDL() |
| + "\"))\n"); |
| c_writer.write("\t{\n"); |
| c_writer.write("\t\treturn AXIS_FAIL;\n"); |
| c_writer.write("\t}\n"); |
| c_writer.write( |
| "\tpIWSSZ->createSoapMethod(\"" |
| //Chinthana:Fixed for AXISCPP-378 |
| //+ minfo.getMethodname() |
| //+ "Response\", \"" |
| + minfo.getOutputMessage().getLocalPart() |
| + "\", \"" |
| //15/06/2005................................ |
| + wscontext.getWrapperInfo().getTargetNameSpaceOfWSDL() |
| + "\");\n"); |
| //create and populate variables for each parameter |
| String paraTypeName; |
| String parameterName; |
| String returnParamName; |
| String paramType; |
| ArrayList paramsB = new ArrayList(params); |
| for (int i = 0; i < paramsB.size(); i++) |
| { |
| paraTypeName = ((ParameterInfo) paramsB.get(i)).getLangName(); |
| paramType = |
| CUtils.getClassNameFromParamInfoConsideringArrays( |
| (ParameterInfo) paramsB.get(i), |
| wscontext); |
| parameterName = ((ParameterInfo) paramsB.get(i)).getParamNameAsSOAPString(); |
| ParameterInfo param = (ParameterInfo) paramsB.get(i); |
| if ((CUtils |
| .isSimpleType(param.getLangName()))) |
| { |
| //for simple types |
| if (param.isNillable()) |
| { |
| if (CUtils.isPointerType(param.getLangName())) |
| { |
| c_writer.write("\n\t" + paraTypeName + " v" + i + " = NULL;\n"); |
| c_writer.write("\t" |
| + paraTypeName |
| + " value" |
| + i |
| + " = pIWSDZ->" |
| + CUtils.getDeserializerMethodName(paraTypeName, false) |
| + "(\"" |
| + parameterName + "\",0);\n"); |
| c_writer.write("\tif (value" + i + ")\n"); |
| c_writer.write("\t{\n"); |
| c_writer.write("\t\tv" + i + " = new char[ strlen( value" + i + " ) + 1 ];\n"); |
| c_writer.write("\t\tstrcpy( v" + i + ", value" + i + " );\n"); |
| c_writer.write("\t\tAxis::AxisDelete( (void *) value" + i + ", " + CUtils.getXSDEnumeratorForType(paraTypeName) + ");\n"); |
| c_writer.write("\t}\n"); |
| } |
| else |
| { |
| c_writer.write("\n\t" + paraTypeName + " * v" + i + " = NULL;\n"); |
| c_writer.write("\t" |
| + paraTypeName |
| + "* pValue" |
| + i |
| + " = pIWSDZ->" |
| + CUtils.getDeserializerMethodName(paraTypeName, false) |
| + "(\"" |
| + parameterName + "\",0);\n"); |
| c_writer.write("\tif (pValue" + i + ")\n"); |
| c_writer.write("\t{\n"); |
| c_writer.write("\t\tv" + i + " = new " + paraTypeName + "();"); |
| c_writer.write("\t\t*v" + i + " = *pValue" + i + ";\n"); |
| c_writer.write("\t\tAxis::AxisDelete( (void *) pValue" + i + ", " + CUtils.getXSDEnumeratorForType(paraTypeName) + ");\n"); |
| c_writer.write("\t}\n"); |
| } |
| } |
| else |
| { |
| if (CUtils.isPointerType(param.getLangName())) |
| { |
| c_writer.write("\n\t" + paraTypeName + " v" + i + " = NULL;\n"); |
| c_writer.write("\t" |
| + paraTypeName |
| + " value" |
| + i |
| + " = pIWSDZ->" |
| + CUtils.getDeserializerMethodName(paraTypeName, false) |
| + "(\"" |
| + parameterName + "\",0);\n"); |
| c_writer.write("\tif (value" + i + ")\n"); |
| c_writer.write("\t{\n"); |
| c_writer.write("\t\tv" + i + " = new char[ strlen( value" + i + " ) + 1 ];\n"); |
| c_writer.write("\t\tstrcpy( v" + i + ", value" + i + " );\n"); |
| c_writer.write("\t\tAxis::AxisDelete( (void *) value" + i + ", " + CUtils.getXSDEnumeratorForType(paraTypeName) + ");\n"); |
| c_writer.write("\t}\n"); |
| } |
| else |
| { |
| c_writer.write("\n\t" + paraTypeName + " v" + i); |
| String typeInitValue = CUtils.getInitValueForType(paraTypeName); |
| if (typeInitValue != null) |
| c_writer.write(" = " + typeInitValue); |
| |
| c_writer.write(";\n"); |
| c_writer.write("\t" |
| + paraTypeName |
| + " * pValue" |
| + i |
| + " = pIWSDZ->" |
| + CUtils.getDeserializerMethodName(paraTypeName, false) |
| + "(\"" |
| + parameterName + "\",0);\n"); |
| c_writer.write("\tif (pValue" + i + ")\n"); |
| c_writer.write("\t{\n"); |
| c_writer.write("\t\tv" + i + " = *pValue" + i + ";\n"); |
| c_writer.write("\t\tAxis::AxisDelete( (void *) pValue" + i + ", " + CUtils.getXSDEnumeratorForType(paraTypeName) + " );\n"); |
| c_writer.write("\t}\n"); |
| } |
| } |
| } |
| else |
| if ((type = |
| this.wscontext.getTypemap().getType( |
| ((ParameterInfo) paramsB.get(i)).getSchemaName())) |
| != null |
| && type.isArray()) |
| { |
| QName qname = CUtils.getArrayType(type).getName(); |
| String containedType = null; |
| if (CUtils.isSimpleType(qname)) |
| { |
| containedType = CUtils.getSimpleType(qname); |
| String containedTypeArray = CUtils.getArrayNameForType(containedType); |
| |
| c_writer.write("\n\t" + containedTypeArray + " * v" + i +" = new " |
| + containedTypeArray + "();\n"); |
| c_writer.write( |
| "\t" |
| + "Axis_Array * RetArray" |
| + i |
| + " = pIWSDZ->getBasicArray(" |
| + CUtils.getXSDEnumeratorForType(containedType) |
| + ", \"" |
| + parameterName |
| + "\",0);\n"); |
| c_writer.write ("\tv" + i + "->clone(*RetArray"+ i + ");\n"); |
| c_writer.write ("\tAxis::AxisDelete( (void *)RetArray" + i + ", XSD_ARRAY);\n\n"); |
| } |
| else |
| { |
| containedType = qname.getLocalPart(); |
| String containedTypeArray = CUtils.getArrayNameForType(containedType); |
| c_writer.write("\t" + containedTypeArray + " * v" + i +" = new " + containedTypeArray + "();\n"); |
| c_writer.write( |
| "\t" |
| + "pIWSDZ->getCmplxArray(v" + i + ", (void*)Axis_DeSerialize_" |
| + containedType |
| + ",\n\t\t(void*)Axis_Create_" |
| + containedType |
| + ", (void*)Axis_Delete_" |
| + containedType |
| + ",\n\t\t \"" |
| + parameterName |
| + "\", Axis_URI_" |
| + containedType |
| + ");\n"); |
| } |
| } |
| else |
| { |
| //for complex types |
| c_writer.write( |
| "\n\t" |
| + paraTypeName |
| + " *v" |
| + i |
| + " = (" |
| + paraTypeName |
| + "*)pIWSDZ->getCmplxObject((void*)Axis_DeSerialize_" |
| + paraTypeName |
| + "\n\t\t, (void*)Axis_Create_" |
| + paraTypeName |
| + ", (void*)Axis_Delete_" |
| + paraTypeName |
| + "\n\t\t, \"" |
| + parameterName |
| + "\", Axis_URI_" |
| + paraTypeName |
| + ");\n"); |
| } |
| } |
| c_writer.write("\tif (AXIS_SUCCESS != (nStatus = pIWSDZ->getStatus()))\n"); |
| c_writer.write("\t{\n"); |
| c_writer.write("\t\treturn nStatus;\n"); |
| c_writer.write("\t}\n"); |
| // Multiples parameters so fill the methods prototype |
| if (isAllTreatedAsOutParams) |
| { |
| ArrayList paramsC = (ArrayList) minfo.getOutputParameterTypes(); |
| for (int i = 0; i < paramsC.size(); i++) |
| { |
| ParameterInfo param = (ParameterInfo) paramsC.get(i); |
| String typeName = CUtils.getClassNameFromParamInfoConsideringArrays( |
| (ParameterInfo) paramsC.get(i), wscontext); |
| c_writer.write("\t" + typeName); |
| |
| if ( (param.isOptional() || param.isNillable()) && CUtils.isSimpleType(typeName) && !CUtils.isPointerType(typeName) && !param.isArray()) |
| { |
| c_writer.write(" *"); |
| } |
| c_writer.write(" out" + i + ";\n"); |
| } |
| } |
| c_writer.write("\ttry\n\t{\n"); |
| if (returntype != null) |
| { |
| /* Invoke the service when return type not void */ |
| c_writer.write("\t\t" + outparamTypeName); |
| |
| if ((CUtils.isArrayType(outparamTypeName)) |
| || (returntypeissimple |
| && returntype.isNillable() |
| &&!(CUtils.isPointerType(outparamTypeName)))) |
| { |
| c_writer.write(" *"); |
| } |
| c_writer.write(" ret = " |
| + "pWs->" |
| + minfo.getSanitizedMethodName() |
| + "("); |
| if (0 < paramsB.size()) |
| { |
| for (int i = 0; i < paramsB.size() - 1; i++) |
| { |
| c_writer.write("v" + i + ","); |
| } |
| c_writer.write("v" + (paramsB.size() - 1)); |
| } |
| c_writer.write(");\n"); |
| /* set the result */ |
| if (returntypeissimple) |
| { |
| if (returntype.isNillable() |
| || (CUtils.isPointerType(outparamTypeName))) |
| { |
| c_writer.write( |
| "\t\treturn pIWSSZ->addOutputParam(\"" |
| + minfo.getMethodname() |
| + "Return\", (void*)ret, " |
| + CUtils.getXSDEnumeratorForType(outparamTypeName) |
| + ");\n"); |
| } |
| else |
| { |
| c_writer.write( |
| "\t\treturn pIWSSZ->addOutputParam(\"" |
| + minfo.getMethodname() |
| + "Return\", (void*)&ret, " |
| + CUtils.getXSDEnumeratorForType(outparamTypeName) |
| + ");\n"); |
| } |
| } |
| else |
| if (returntypeisarray) |
| { |
| QName qname = CUtils.getArrayType(retType).getName(); |
| String containedType = null; |
| if (CUtils.isSimpleType(qname)) |
| { |
| containedType = CUtils.getSimpleType(qname); |
| c_writer.write( |
| "\t\tnStatus = pIWSSZ->addOutputBasicArrayParam(ret," |
| + CUtils.getXSDEnumeratorForType(containedType) |
| + ", \"" |
| + minfo.getMethodname() |
| + "Return\");\n"); |
| c_writer.write("\t\tdelete ret;\n"); |
| c_writer.write("\t\t return nStatus;\n"); |
| } |
| else |
| { |
| containedType = qname.getLocalPart(); |
| c_writer.write( |
| "\t\tnStatus = pIWSSZ->addOutputCmplxArrayParam(ret," |
| + "(void*) Axis_Serialize_" |
| + containedType |
| + ", (void*) Axis_Delete_" |
| + containedType |
| + ", \"" |
| + minfo.getMethodname() |
| + "Return\", Axis_URI_" |
| + containedType |
| + ");\n"); |
| c_writer.write("\t\tdelete ret;\n"); |
| c_writer.write("\t\treturn nStatus;\n"); |
| } |
| } |
| else |
| { |
| //complex type |
| outparamTypeName = returntype.getLangName(); |
| //need to have complex type name without * |
| c_writer.write( |
| "\t\treturn pIWSSZ->addOutputCmplxParam(ret, (void*)Axis_Serialize_" |
| + outparamTypeName |
| + ", (void*)Axis_Delete_" |
| + outparamTypeName |
| + ", \"" |
| + minfo.getMethodname() |
| + "Return\", Axis_URI_" |
| + outparamTypeName |
| + ");\n"); |
| } |
| } |
| else |
| if (isAllTreatedAsOutParams) |
| { |
| c_writer.write("\t\tpWs->" + minfo.getSanitizedMethodName() + "("); |
| if (0 < paramsB.size()) |
| { |
| for (int i = 0; i < paramsB.size(); i++) |
| { |
| c_writer.write("v" + i + ","); |
| } |
| } |
| ArrayList paramsC = (ArrayList) minfo.getOutputParameterTypes(); |
| for (int i = 0; i < paramsC.size() - 1; i++) |
| { |
| c_writer.write("&out" + i + ","); |
| } |
| c_writer.write("&out" + (paramsC.size() - 1)); |
| |
| c_writer.write(");\n"); |
| paramsC = (ArrayList) minfo.getOutputParameterTypes(); |
| for (int i = 0; i < paramsC.size(); i++) |
| { |
| ParameterInfo param = (ParameterInfo) paramsC.get(i); |
| retType = |
| wscontext.getTypemap().getType( |
| ((ParameterInfo) paramsC.get(i)).getSchemaName()); |
| if (retType != null) |
| { |
| outparamType = retType.getLanguageSpecificName(); |
| returntypeisarray = retType.isArray(); |
| } |
| else |
| { |
| outparamType = returntype.getLangName(); |
| } |
| returntypeissimple = CUtils.isSimpleType(outparamType); |
| returnParamName = |
| ((ParameterInfo) paramsC.get(i)).getParamName(); |
| if (returntypeissimple) |
| { |
| |
| if (CUtils.isPointerType(outparamType) || param.isOptional() || param.isNillable()) |
| { |
| if (param.isOptional()) |
| { |
| c_writer.write("\tif (out" + i + ")\n"); |
| c_writer.write("\t{\n"); |
| c_writer.write("\t"); |
| } |
| c_writer.write( |
| "\tpIWSSZ->addOutputParam(\"" |
| + returnParamName.substring(returnParamName.lastIndexOf(">")+1) |
| + "\", (void*)out" |
| + i |
| + ", " |
| + CUtils.getXSDEnumeratorForType(outparamType) |
| + ");\n"); |
| if (param.isOptional()) |
| { |
| c_writer.write("\t}\n"); |
| } |
| } |
| else |
| { |
| c_writer.write( |
| "\tpIWSSZ->addOutputParam(\"" |
| + returnParamName.substring(returnParamName.lastIndexOf(">")+1) |
| + "\", (void*)&out" |
| + i |
| + ", " |
| + CUtils.getXSDEnumeratorForType(outparamType) |
| + ");\n"); |
| } |
| } |
| else |
| if (returntypeisarray) |
| { |
| QName qname = |
| CUtils.getArrayType(retType).getName(); |
| String containedType = null; |
| if (CUtils.isSimpleType(qname)) |
| { |
| containedType = CUtils.getSimpleType(qname); |
| c_writer.write( |
| "\t\tpIWSSZ->addOutputBasicArrayParam((Axis_Array*)(&out" |
| + i |
| + ")," |
| + CUtils.getXSDEnumeratorForType( |
| containedType) |
| + ", \"" |
| + returnParamName |
| + "\");\n"); |
| } |
| else |
| { |
| containedType = qname.getLocalPart(); |
| c_writer.write( |
| "\t\tpIWSSZ->addOutputCmplxArrayParam((Axis_Array*)(&out" |
| + i |
| + ")," |
| + "(void*) Axis_Serialize_" |
| + containedType |
| + ", (void*) Axis_Delete_" |
| + containedType |
| + ", \"" |
| + returnParamName |
| + "\", Axis_URI_" |
| + containedType |
| + ");\n"); |
| } |
| } |
| else |
| { |
| //complex type |
| if (param.isOptional()) |
| { |
| c_writer.write("\tif (out" + i + ")\n"); |
| c_writer.write("\t{\n"); |
| c_writer.write("\t"); |
| } |
| c_writer.write( |
| "\t\tpIWSSZ->addOutputCmplxParam(out" |
| + i |
| + ", (void*)Axis_Serialize_" |
| + outparamType |
| + ", (void*)Axis_Delete_" |
| + outparamType |
| + ", \"" |
| + returnParamName |
| + "\", Axis_URI_" |
| + outparamType |
| + ");\n"); |
| if (param.isOptional()) |
| { |
| c_writer.write("\t}\n"); |
| } |
| } |
| } |
| c_writer.write("\treturn AXIS_SUCCESS;\n"); |
| } |
| else |
| { //method does not return anything |
| /* Invoke the service when return type is void */ |
| c_writer.write("\t\tpWs->" + minfo.getSanitizedMethodName() + "("); |
| if (0 < paramsB.size()) |
| { |
| for (int i = 0; i < paramsB.size() - 1; i++) |
| { |
| c_writer.write("v" + i + ","); |
| } |
| c_writer.write("v" + (paramsB.size() - 1)); |
| } |
| c_writer.write(");\n"); |
| c_writer.write("\treturn AXIS_SUCCESS;\n"); |
| |
| } |
| c_writer.write("\t}\n"); //nithya |
| Iterator paramsFault = minfo.getFaultType().iterator(); |
| String faultInfoName = null; |
| String faultType = null; |
| String langName = null; |
| String paramName = null; |
| while (paramsFault.hasNext()) |
| { |
| FaultInfo info = (FaultInfo) paramsFault.next(); |
| faultInfoName = info.getFaultInfo(); |
| ArrayList paramInfo = info.getParams(); |
| for (int i = 0; i < paramInfo.size(); i++) |
| { |
| ParameterInfo par = (ParameterInfo) paramInfo.get(i); |
| paramName = par.getParamName(); |
| langName = par.getLangName(); |
| faultType = |
| CUtils.getClassNameFromParamInfoConsideringArrays( |
| par, |
| wscontext); |
| writeExceptions(faultType, faultInfoName, paramName, langName); |
| } |
| } |
| |
| // Handle SOAP faults not specified within the WSDL (ie OtherFaultException) |
| c_writer.write("\tcatch(OtherFaultException * pObjFault)\n"); |
| c_writer.write("\t{\n"); |
| c_writer.write("\t\tif (pObjFault)\n"); |
| c_writer.write("\t\t{\n"); |
| c_writer.write("\t\t\tpIWSSZ->createSoapFault(\"\", \"\", pObjFault->getFaultCode(), pObjFault->getFaultString());\n"); |
| c_writer.write("\t\t\tpIWSSZ->addFaultDetail(pObjFault->getFaultDetail());\n"); |
| c_writer.write("\t\t\tdelete pObjFault;\n"); |
| c_writer.write("\t\t\tthrow AxisServiceException(AXISC_SERVICE_THROWN_EXCEPTION);\n"); |
| c_writer.write("\t\t}\n"); |
| c_writer.write("\t\treturn AXIS_FAIL;\n"); |
| c_writer.write("\t}\n"); |
| |
| // Handle generic exception, placing the message into a generic SOAP fault |
| c_writer.write("\tcatch (exception & e)\n"); |
| c_writer.write("\t{\n"); |
| c_writer.write("\t\tpIWSSZ->createSoapFault(\"\", \"\", \"Server\", e.what());\n"); |
| c_writer.write("\t\tthrow AxisServiceException(AXISC_SERVICE_THROWN_EXCEPTION);\n"); |
| c_writer.write("\t\treturn AXIS_FAIL;\n"); |
| c_writer.write("\t}\n"); |
| |
| // Handle any other exception |
| c_writer.write("\tcatch(...)\n"); |
| c_writer.write("\t{\n"); |
| c_writer.write("\t\treturn AXIS_FAIL;\n"); |
| c_writer.write("\t}\n"); |
| //write end of method |
| c_writer.write("}\n"); |
| } |
| |
| /* (non-Javadoc) |
| * @see org.apache.axis.wsdl.wsdl2ws.cpp.CPPClassWriter#writeGlobalCodes() |
| */ |
| private void writeExceptions( |
| String faulttype, |
| String faultInfoName, |
| String paramName, |
| String langName) |
| throws WrapperFault |
| { |
| try |
| { |
| c_writer.write("\tcatch(" + faulttype + " pObjFault)\n"); |
| c_writer.write("\t{\n"); |
| c_writer.write("\t\tif (pObjFault)\n"); |
| c_writer.write("\t\t{\n"); |
| c_writer.write( |
| "\t\tpIWSSZ->createSoapFault(\"" |
| + langName |
| + "\", \"" |
| + wscontext.getWrapperInfo().getTargetNameSpaceOfWSDL() |
| + "\",\"AxisC++ Faultcode\", \"Custom Out of bound exception\");\n"); |
| // writer.write("\t\t"+faulttype+" pObjFault = new "+langName+"();\n"); |
| c_writer.write( |
| "\t\t\tpIWSSZ->addFaultDetail(pObjFault, (void*) Axis_Serialize_" |
| + langName |
| + ",\n"); |
| c_writer.write( |
| "\t\t\t(void*) Axis_Delete_" |
| + langName |
| + ",\"" |
| + langName |
| + "\", Axis_URI_" |
| + langName |
| + ");\n"); |
| c_writer.write("\t\tthrow AxisServiceException(AXISC_SERVICE_THROWN_EXCEPTION);\n"); |
| c_writer.write("\t\t}\n"); |
| c_writer.write("\t\treturn AXIS_FAIL;\n"); |
| c_writer.write("\t}\n"); |
| c_writer.write("\n"); |
| } |
| catch (IOException e) |
| { |
| throw new WrapperFault(e); |
| } |
| } |
| |
| protected void writeGlobalCodes() throws WrapperFault |
| { |
| } |
| } |