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 2006/04/01 05:49:57 UTC
svn commit: r390587 -
/webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal/ClientStubWriter.java
Author: nadiramra
Date: Fri Mar 31 19:49:55 2006
New Revision: 390587
URL: http://svn.apache.org/viewcvs?rev=390587&view=rev
Log:
C support fixes/enhancements.
Modified:
webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal/ClientStubWriter.java
Modified: webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal/ClientStubWriter.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal/ClientStubWriter.java?rev=390587&r1=390586&r2=390587&view=diff
==============================================================================
--- webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal/ClientStubWriter.java (original)
+++ webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal/ClientStubWriter.java Fri Mar 31 19:49:55 2006
@@ -31,6 +31,7 @@
import javax.xml.namespace.QName;
import org.apache.axis.wsdl.wsdl2ws.CUtils;
+import org.apache.axis.wsdl.wsdl2ws.WrapperConstants;
import org.apache.axis.wsdl.wsdl2ws.WrapperFault;
import org.apache.axis.wsdl.wsdl2ws.WrapperUtils;
import org.apache.axis.wsdl.wsdl2ws.info.MethodInfo;
@@ -107,6 +108,7 @@
boolean isAllTreatedAsOutParams = false;
ParameterInfo returntype = null;
int noOfOutParams = minfo.getOutputParameterTypes().size();
+
if (0 == noOfOutParams)
returntype = null;
else if (1 == noOfOutParams)
@@ -119,8 +121,9 @@
Type retType = null;
boolean returntypeissimple = false;
boolean returntypeisarray = false;
- boolean aretherearrayparams = false;
String outparamType = null;
+ boolean aretherearrayparams = false;
+
if (returntype != null)
retType = wscontext.getTypemap().getType(returntype.getSchemaName());
@@ -145,6 +148,7 @@
writer.write("\n/*\n");
writer.write(" * This function wraps the service method " + methodName + "\n");
writer.write(" */\n");
+
//method signature
String paraTypeName;
boolean typeisarray = false;
@@ -264,7 +268,11 @@
{
ParameterInfo param = (ParameterInfo) paramsB.get(i);
- // Ignore attributes, while adding elements
+ // Ignore attributes
+ if (param.isAttribute ())
+ continue;
+
+ // Add elements
type = wscontext.getTypemap().getType(param.getSchemaName());
if (type != null)
{
@@ -284,65 +292,129 @@
}
else
{
- paraTypeName = param.getLangName();
+ paraTypeName = ((ParameterInfo) paramsB.get (i)).getLangName ();
typeisarray = false;
}
-
- typeissimple = CUtils.isSimpleType(paraTypeName);
- if (typeisarray)
+
+ if (param.isAnyType ())
+ writer.write("\taxiscAddAnyObjectCall(call, Value" + i);
+ else
{
- //arrays
- QName qname = WrapperUtils.getArrayType(type).getName();
- String containedType = null;
- if (CUtils.isSimpleType(qname))
+ String parameterName = ((ParameterInfo) paramsB.get (i)).getElementNameAsString ();
+ String namespace = ((ParameterInfo) paramsB.get (i)).getElementName ().getNamespaceURI ();
+
+ if (((ParameterInfo)paramsB.get(i)).isOptional())
+ writer.write("\tif (Value" + i + " != NULL)\n\t{\n");
+ else
+ writer.write("\t{\n");
+
+ if (namespace.length () == 0)
{
- containedType = CUtils.getclass4qname(qname);
- writer.write("\taxiscAddBasicArrayParameterCall(call, ");
- writer.write("(Axisc_Array*)(&Value" + i + "), "
- + CUtils.getXSDTypeForBasicType(containedType) + ", \""
- + param.getElementNameAsString() + "\"");
+ writer.write ("\tchar cPrefixAndParamName"
+ + i + "[" + "] = \"" + parameterName + "\";\n");
}
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);
+ int stringLength = 8 + 1 + parameterName.length () + 1;
+ writer.write ("\tchar cPrefixAndParamName" + i + "[" + stringLength + "];\n");
+ writer.write ("\tsprintf( cPrefixAndParamName" + i +
+ ", \"%s:" + parameterName +
+ "\", axiscGetNamespacePrefixCall(call,\"" + namespace + "\"));\n");
+ }
+
+ if (param.getType().isAttachment())
+ {
+ // TODO
+ String attchType = param.getType().getName().getLocalPart();
+ writer.write("\n\tconst AxisChar *xmlSoapNsPfx" + i +
+ " = axiscGetNamespacePrefixCall(call,\"" +
+ WrapperConstants.APACHE_XMLSOAP_NAMESPACE + "\");\n");
+ writer.write("\tchar attchType" + i + "[64];\n");
+ writer.write("\tstrcpy(attchType" + i + ", xmlSoapNsPfx" + i + ");\n");
+ writer.write("\tstrcat(attchType" + i + ", \":" + attchType + "\");\n");
+ writer.write("\tIAttribute *attrs" + i + "[2];\n");
+ writer.write("\tattrs" + i + "[0] = axiscCreateAttributeCall(call,\"type\", \"xsi\", attchType" + i +
+ ");\n");
+ writer.write("\tattrs" + i + "[1] = axiscCreateAttributeCall(call,xmlSoapNsPfx" + i +
+ ", \"xmlns\", \"http://xml.apache.org/xml-soap\");\n");
+ writer.write("\taxiscAddAttachmentParameterCall(call, Value" + i + ", cPrefixAndParamName" + i +
+ ", attrs" + i + ", 2");
+ }
+ else if (typeisarray)
+ {
+ Type arrayType = WrapperUtils.getArrayType (type);
+
+ QName qname = null;
+ if (arrayType != null)
+ qname = arrayType.getName ();
+ else
+ qname = type.getName ();
+
+ if (CUtils.isSimpleType (qname))
+ {
+ // Array of simple type
+ String containedType = CUtils.getclass4qname (qname);
+ writer.write ("\taxiscAddBasicArrayParameterCall(call,");
+ writer.write ("Value" + i + ", " +
+ CUtils.getXSDTypeForBasicType(containedType) + ", cPrefixAndParamName" + i);
+ }
+ else if (arrayType != null && arrayType.isSimpleType ())
+ {
+ String containedType = CUtils.getclass4qname (arrayType.getBaseType ());
+ writer.write ("\taxiscAddBasicArrayParameterCall(call,");
+ writer.write ("Value" + i + ", " +
+ CUtils.getXSDTypeForBasicType(containedType) +
+ ", cPrefixAndParamName" + i);
+ }
+ else
+ {
+ // Array of complex type
+ String containedType = qname.getLocalPart ();
+ writer.write ("\taxiscAddCmplxArrayParameterCall(call,");
+ writer.write ("Value" + i +
+ ", (void*)Axis_Serialize_" + containedType +
+ ", (void*)Axis_Delete_" + containedType +
+ ", (void*) Axis_GetSize_" + containedType + ", \"" +
+ parameterName + "\"" + ", ");
+
+ if (namespace.length () == 0)
+ writer.write ("NULL");
+ else
+ writer.write ("Axis_URI_" + containedType);
+ }
+ }
+ else if (CUtils.isSimpleType (paraTypeName))
+ {
+ if (param.isNillable ()
+ || param.isOptional()
+ || CUtils.isPointerType(paraTypeName))
+ {
+ writer.write ("\taxiscAddParameterCall(call,");
+ writer.write ("(void*)Value" + i + ", cPrefixAndParamName" + i
+ + ", " + CUtils.getXSDTypeForBasicType(paraTypeName));
+ }
+ else
+ {
+ writer.write ("\taxiscAddParameterCall(call,");
+ writer.write ("(void*)&Value" + i + ", cPrefixAndParamName" + i
+ + ", " + CUtils.getXSDTypeForBasicType(paraTypeName));
+ }
}
- }
- else if (typeissimple)
- {
- writer.write("\taxiscAddParameterCall(call, ");
- if (param.isNillable() || CUtils.isPointerType(paraTypeName))
- writer.write("(void*)Value" + i + ", \""
- + param.getElementNameAsString()
- + "\", " + CUtils.getXSDTypeForBasicType(paraTypeName));
else
- writer.write("(void*)&Value" + i + ", \""
- + param.getElementNameAsString()
- + "\", " + CUtils.getXSDTypeForBasicType(paraTypeName));
- }
- else if (param.isAnyType())
- writer.write("\taxiscAddAnyObjectCall(call, Value" + i);
- else
- {
- // for complex types
- writer.write( "\taxiscAddCmplxParameterCall(call, ");
- writer.write( "Value"
- + i
- + ", (void*)Axis_Serialize_" + paraTypeName
- + ", (void*)Axis_Delete_" + paraTypeName
- + ", \""
- + param.getElementNameAsString()
- + "\", Axis_URI_" + paraTypeName);
+ {
+ // Complex Type
+ writer.write ("\taxiscAddCmplxParameterCall(call,");
+ writer.write ("Value" + i
+ + ", (void*)Axis_Serialize_" + paraTypeName
+ + ", (void*)Axis_Delete_" + paraTypeName
+ + ", cPrefixAndParamName" + i + ", Axis_URI_" + paraTypeName);
+ }
}
- writer.write(");\n");
- }
+
+ writer.write (");\n");
+ if (!param.isAnyType ())
+ writer.write("\t}\n");
+ } // end for-loop
writer.write("\tif (AXISC_SUCCESS == axiscInvokeCall(call))\n\t{\n");
writer.write("\t\tif(AXISC_SUCCESS == axiscCheckMessageCall(call, \""