blob: 37849c35df7e0c1a428593b2ad099d4db26cf41e [file] [log] [blame]
/*
* 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
{
}
}