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 di...@apache.org on 2006/02/13 16:32:37 UTC

svn commit: r377395 - in /webservices/axis/trunk/c: src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/ src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/literal/ tests/auto_build/testcases/server/cpp/ tests/auto_build/testcases/tests/server/

Author: dicka
Date: Mon Feb 13 07:32:35 2006
New Revision: 377395

URL: http://svn.apache.org/viewcvs?rev=377395&view=rev
Log:
Include server-side support for optional (minOccurs="0") elements.
Also including a new service, MinOccursIsZero.

This change also includes some fixes for nillable, so also updating the MultiOut service implementation.

Added:
    webservices/axis/trunk/c/tests/auto_build/testcases/server/cpp/MinOccursIsZero.cpp
    webservices/axis/trunk/c/tests/auto_build/testcases/tests/server/MinOccursIsZero.xml
Modified:
    webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/ServiceHeaderWriter.java
    webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/ServiceWriter.java
    webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/WrapWriter.java
    webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/literal/WrapWriter.java
    webservices/axis/trunk/c/tests/auto_build/testcases/server/cpp/MultiOut.cpp

Modified: webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/ServiceHeaderWriter.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/ServiceHeaderWriter.java?rev=377395&r1=377394&r2=377395&view=diff
==============================================================================
--- webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/ServiceHeaderWriter.java (original)
+++ webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/ServiceHeaderWriter.java Mon Feb 13 07:32:35 2006
@@ -238,16 +238,29 @@
                     for (int j = 0; params.hasNext(); j++)
                     {
                         ParameterInfo nparam = (ParameterInfo) params.next();
-                        String comma = ", ";
-                        if (!hasInputParms && 0==j) comma = "";
-                        writer.write(comma
-                            + "AXIS_OUT_PARAM "
-                                + WrapperUtils
-                                    .getClassNameFromParamInfoConsideringArrays(
-                                    nparam,
-                                    wscontext)
-                                + " *OutValue"
-                                + j);
+                        
+                        if (0 != j || hasInputParms)
+                        {
+                            writer.write(",");
+                        }
+                        
+                        String typeName = WrapperUtils.getClassNameFromParamInfoConsideringArrays(
+                                        	nparam, wscontext);
+                        
+                        writer.write(" AXIS_OUT_PARAM "
+                                + typeName + " ");
+                        
+                        
+                        
+                        if (( nparam.isOptional() || nparam.isNillable())
+                                && CUtils.isSimpleType(typeName)
+                                && !CUtils.isPointerType(typeName)
+                                && !nparam.isArray())
+                        {
+                            writer.write("*");
+                        }
+                        
+                        writer.write("* OutValue" + j);
                     }
                 }
                 writer.write(");\n");

Modified: webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/ServiceWriter.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/ServiceWriter.java?rev=377395&r1=377394&r2=377395&view=diff
==============================================================================
--- webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/ServiceWriter.java (original)
+++ webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/ServiceWriter.java Mon Feb 13 07:32:35 2006
@@ -232,7 +232,7 @@
                     	writer.write(
     	                        ","
     	                            + paramType
-    	                            + " * Value "
+    	                            + " * Value"
     	                            + j);
                     }
                     else
@@ -251,16 +251,28 @@
                     {
                         ParameterInfo nparam = (ParameterInfo) params.next();
                         
-                        String comma = ", ";
-                        if (!hasInputParms && 0==j) comma = "";
-                        writer.write(comma
-                            + "AXIS_OUT_PARAM "
-                                + WrapperUtils
-                                    .getClassNameFromParamInfoConsideringArrays(
-                                    nparam,
-                                    wscontext)
-                                + " *OutValue"
-                                + j);
+                        if (0 != j || hasInputParms)
+                        {
+                            writer.write(",");
+                        }
+                        
+                        String typeName = WrapperUtils.getClassNameFromParamInfoConsideringArrays(
+                                        	nparam, wscontext);
+                        
+                        writer.write(" AXIS_OUT_PARAM "
+                                + typeName + " ");
+                        
+                        
+                        
+                        if (( nparam.isOptional() || nparam.isNillable() )
+                                && CUtils.isSimpleType(typeName)
+                                && !CUtils.isPointerType(typeName)
+                                && !nparam.isArray())
+                        {
+                            writer.write("*");
+                        }
+                        
+                        writer.write("* OutValue" + j);
                     }
                 }
                 writer.write(")  \n{\n}\n\n");

Modified: webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/WrapWriter.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/WrapWriter.java?rev=377395&r1=377394&r2=377395&view=diff
==============================================================================
--- webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/WrapWriter.java (original)
+++ webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/WrapWriter.java Mon Feb 13 07:32:35 2006
@@ -500,18 +500,16 @@
             ArrayList paramsC = (ArrayList) minfo.getOutputParameterTypes();
             for (int i = 0; i < paramsC.size(); i++)
             {
-                type =
-                    wscontext.getTypemap().getType(
-                        ((ParameterInfo) paramsC.get(i)).getSchemaName());
-                writer.write(
-                    "\t"
-                        + WrapperUtils
-                            .getClassNameFromParamInfoConsideringArrays(
-                            (ParameterInfo) paramsC.get(i),
-                            wscontext)
-                        + " out"
-                        + i
-                        + ";\n");
+                ParameterInfo param = (ParameterInfo) paramsC.get(i);
+                String typeName = WrapperUtils.getClassNameFromParamInfoConsideringArrays(
+                        			(ParameterInfo) paramsC.get(i), wscontext);
+                writer.write("\t" + typeName);
+                
+                if ( (param.isOptional() || param.isNillable()) && CUtils.isSimpleType(typeName) && !CUtils.isPointerType(typeName) && !param.isArray())
+                {
+                    writer.write(" *");
+                }
+                writer.write(" out" + i + ";\n");
             }
         }
         writer.write("\ttry\n\t{\n");
@@ -635,6 +633,7 @@
                 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());
@@ -652,14 +651,39 @@
                         ((ParameterInfo) paramsC.get(i)).getParamName();
                     if (returntypeissimple)
                     {
-                        writer.write(
-                            "\t\tpIWSSZ->addOutputParam(\""
-                                + returnParamName
-                                + "\", (void*)&out"
-                                + i
-                                + ", "
-                                + CUtils.getXSDTypeForBasicType(outparamType)
-                                + ");\n");
+                        
+                        if (CUtils.isPointerType(outparamType) || param.isOptional() || param.isNillable())
+                    	{
+                            if (param.isOptional())
+                            {
+                                writer.write("\tif (out" + i + ")\n");
+                                writer.write("\t{\n");
+                                writer.write("\t");
+                            }
+                    		writer.write(
+                                    "\tpIWSSZ->addOutputParam(\""
+                                        + returnParamName.substring(returnParamName.lastIndexOf(">")+1)
+                                        + "\", (void*)out"
+                                        + i
+                                        + ", "
+                                        + CUtils.getXSDTypeForBasicType(outparamType)
+                                        + ");\n");
+                    		if (param.isOptional())
+                    		{
+                    		    writer.write("\t}\n");
+                    		}
+                    	}
+                    	else
+                    	{
+                    		writer.write(
+                                    "\tpIWSSZ->addOutputParam(\""
+                    				    + returnParamName.substring(returnParamName.lastIndexOf(">")+1)
+                                        + "\", (void*)&out"
+                                        + i
+                                        + ", "
+                                        + CUtils.getXSDTypeForBasicType(outparamType)
+                                        + ");\n");
+                    	}
                     }
                     else
                         if (returntypeisarray)
@@ -703,6 +727,12 @@
                         else
                         {
                             //complex type
+                            if (param.isOptional())
+                            {
+                                writer.write("\tif (out" + i + ")\n");
+                                writer.write("\t{\n");
+                                writer.write("\t");
+                            }
                             writer.write(
                                 "\t\tpIWSSZ->addOutputCmplxParam(out"
                                     + i
@@ -715,6 +745,10 @@
                                     + "\", Axis_URI_"
                                     + outparamType
                                     + ");\n");
+                            if (param.isOptional())
+                            {
+                                writer.write("\t}\n");
+                            }
                         }
                 }
                 writer.write("\treturn AXIS_SUCCESS;\n");

Modified: webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/literal/WrapWriter.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/literal/WrapWriter.java?rev=377395&r1=377394&r2=377395&view=diff
==============================================================================
--- webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/literal/WrapWriter.java (original)
+++ webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/literal/WrapWriter.java Mon Feb 13 07:32:35 2006
@@ -258,11 +258,18 @@
                     {
                     	if (CUtils.isPointerType(paraTypeName))
                     	{
+
                     		writer.write("\n\t"
                                 + paraTypeName
                                 + " v"
                                 + i
                                 + " = NULL;\n");
+                    	    if (param.isOptional())
+                    	    {
+                    	        writer.write("\tconst char * elementName" + i + " = pIWSDZ->peekNextElementName();\n");
+                    	        writer.write("\tif ( strcmp( elementName" + i + ", \"" + elementName + "\" ) == 0)\n");
+                    	        writer.write("\t{\n");
+                    	    }
                     		writer.write("\t" + paraTypeName + " value" + i + " = pIWSDZ->"
                                 + CUtils.getParameterGetValueMethodName(
                                     paraTypeName,
@@ -276,12 +283,22 @@
                     		writer.write("\t\tstrcpy( v" + i + ", value" + i + ");\n");
                     		writer.write("\t\tAxis::AxisDelete( (void *) value" + i + ", " + CUtils.getXSDTypeForBasicType(paraTypeName) + " );\n");
                     		writer.write("\t}\n");
+                    		if (param.isOptional())
+                    		{
+                    		    writer.write("\t}\n");
+                    		}
                     	}
                     	else
                     	{
-                    		if (param.isNillable())
+                    		if (param.isNillable()  || param.isOptional())
                     		{
                     		    writer.write("\n\t" + paraTypeName + " * v" + i + " = NULL;\n");
+                    		    if (param.isOptional())
+                    		    {
+                    		        writer.write("\tconst char * elementName" + i + " = pIWSDZ->peekNextElementName();\n");
+                    		        writer.write("\tif (strcmp( elementName" + i + ", \"" + elementName + "\" ) == 0)\n");
+                    		        writer.write("\t{\n");
+                    		    }
                     		    writer.write("\t" + paraTypeName + " * pValue" + i
                                         + " = pIWSDZ->"
                                         + CUtils.getParameterGetValueMethodName(
@@ -296,6 +313,10 @@
                     		    writer.write("\t\t*v" + i + " = *pValue" + i + ";\n");
                     		    writer.write("\t\tAxis::AxisDelete( (void *) pValue" + i + ", " + CUtils.getXSDTypeForBasicType(paraTypeName) + ");\n");
                     		    writer.write("\t}\n");
+                    		    if (param.isOptional())
+                    		    {
+                    		        writer.write("\t}\n");
+                    		    }
                     		}
                     		else
                     		{
@@ -447,18 +468,16 @@
             ArrayList paramsC = (ArrayList) minfo.getOutputParameterTypes();
             for (int i = 0; i < paramsC.size(); i++)
             {
-                type =
-                    wscontext.getTypemap().getType(
-                        ((ParameterInfo) paramsC.get(i)).getSchemaName());
-                writer.write(
-                    "\t"
-                        + WrapperUtils
-                            .getClassNameFromParamInfoConsideringArrays(
-                            (ParameterInfo) paramsC.get(i),
-                            wscontext)
-                        + " out"
-                        + i
-                        + ";\n");
+                ParameterInfo param = (ParameterInfo) paramsC.get(i);
+                String typeName = WrapperUtils.getClassNameFromParamInfoConsideringArrays(
+                        			(ParameterInfo) paramsC.get(i), wscontext);
+                writer.write("\t" + typeName);
+                
+                if ( (param.isOptional() || param.isNillable()) && CUtils.isSimpleType(typeName) && !CUtils.isPointerType(typeName) && !param.isArray())
+                {
+                    writer.write(" *");
+                }
+                writer.write(" out" + i + ";\n");
             }
         }
         writer.write("\ttry\n\t{\n"); //nithya
@@ -696,8 +715,14 @@
                         	 */
                         	
                         	
-                        	if (CUtils.isPointerType(outparamType))
+                        	if (CUtils.isPointerType(outparamType) || param.isOptional() || param.isNillable())
                         	{
+                                if (param.isOptional())
+                                {
+                                    writer.write("\tif (out" + i + ")\n");
+                                    writer.write("\t{\n");
+                                    writer.write("\t");
+                                }
                         		writer.write(
                                         "\tpIWSSZ->addOutputParam(\""
                                             + returnParamName.substring(returnParamName.lastIndexOf(">")+1)
@@ -706,6 +731,10 @@
                                             + ", "
                                             + CUtils.getXSDTypeForBasicType(outparamType)
                                             + ");\n");
+                        		if (param.isOptional())
+                        		{
+                        		    writer.write("\t}\n");
+                        		}
                         	}
                         	else
                         	{
@@ -792,6 +821,12 @@
                             }
                             else
                             {
+                                if (param.isOptional())
+                                {
+                                    writer.write("\tif (out" + i + ")\n");
+                                    writer.write("\t{\n");
+                                    writer.write("\t");
+                                }
                                 //complex type
                                 writer.write(
                                     "\tpIWSSZ->addOutputCmplxParam(out"
@@ -805,6 +840,10 @@
                                         + "\", Axis_URI_"
                                         + outparamType
                                         + ");\n");
+                                if (param.isOptional())
+                                {
+                                    writer.write("\t}\n");
+                                }
                             }
                         }
                     }

Added: webservices/axis/trunk/c/tests/auto_build/testcases/server/cpp/MinOccursIsZero.cpp
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/c/tests/auto_build/testcases/server/cpp/MinOccursIsZero.cpp?rev=377395&view=auto
==============================================================================
--- webservices/axis/trunk/c/tests/auto_build/testcases/server/cpp/MinOccursIsZero.cpp (added)
+++ webservices/axis/trunk/c/tests/auto_build/testcases/server/cpp/MinOccursIsZero.cpp Mon Feb 13 07:32:35 2006
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2003-2004 The Apache Software Foundation.
+
+ *
+ * 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.
+ *
+ * This file was auto-generated by the Axis C++ Web Service Generator (WSDL2Ws)
+ * This file contains definitions of the web service
+ */
+
+#include "MinOccursIsZero.hpp"
+
+
+MinOccursIsZero::MinOccursIsZero()
+{
+}
+
+MinOccursIsZero::~MinOccursIsZero()
+{
+}
+
+/* This function is called by the AxisEngine when something went wrong
+ with the current web service request processing. Appropriate actions should
+ be taken here.*/
+void MinOccursIsZero::onFault()
+{
+}
+
+void MinOccursIsZero::optionalElements(xsd__string Value0, xsd__integer * Value1, SimpleComplexType * Value2, AXIS_OUT_PARAM xsd__string * OutValue0, AXIS_OUT_PARAM xsd__integer ** OutValue1, AXIS_OUT_PARAM SimpleComplexType ** OutValue2)  
+{
+	OutValue0 = &Value0;
+	OutValue1 = &Value1;
+	OutValue2 = &Value2;
+}
+

Modified: webservices/axis/trunk/c/tests/auto_build/testcases/server/cpp/MultiOut.cpp
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/c/tests/auto_build/testcases/server/cpp/MultiOut.cpp?rev=377395&r1=377394&r2=377395&view=diff
==============================================================================
--- webservices/axis/trunk/c/tests/auto_build/testcases/server/cpp/MultiOut.cpp (original)
+++ webservices/axis/trunk/c/tests/auto_build/testcases/server/cpp/MultiOut.cpp Mon Feb 13 07:32:35 2006
@@ -36,15 +36,15 @@
 {
 }
 
-void MultiOut::get(AXIS_OUT_PARAM xsd__string *OutValue0, AXIS_OUT_PARAM xsd__integer *OutValue1, AXIS_OUT_PARAM xsd__int *OutValue2, AXIS_OUT_PARAM xsd__long *OutValue3, AXIS_OUT_PARAM xsd__short *OutValue4, AXIS_OUT_PARAM xsd__decimal *OutValue5, AXIS_OUT_PARAM xsd__float *OutValue6, AXIS_OUT_PARAM xsd__double *OutValue7, AXIS_OUT_PARAM xsd__boolean *OutValue8, AXIS_OUT_PARAM xsd__byte *OutValue9)  
+void MultiOut::get(AXIS_OUT_PARAM xsd__string *OutValue0, AXIS_OUT_PARAM xsd__integer **OutValue1, AXIS_OUT_PARAM xsd__int *OutValue2, AXIS_OUT_PARAM xsd__long *OutValue3, AXIS_OUT_PARAM xsd__short *OutValue4, AXIS_OUT_PARAM xsd__decimal *OutValue5, AXIS_OUT_PARAM xsd__float *OutValue6, AXIS_OUT_PARAM xsd__double *OutValue7, AXIS_OUT_PARAM xsd__boolean *OutValue8, AXIS_OUT_PARAM xsd__byte *OutValue9)  
 {
 	*OutValue0 = "Hello Mark";
-	*OutValue1 = 23;
+	*OutValue1 = new xsd__integer(23);
 	*OutValue2 = 23;
 	*OutValue3 = 23;
 	*OutValue4 = 23;
 	*OutValue5 = 23;
-	*OutValue6 = 23.1;
+	*OutValue6 = (float) 23.1;
 	*OutValue7 = 23.1;
 	*OutValue8 = true_;
 	*OutValue9 = 'A';

Added: webservices/axis/trunk/c/tests/auto_build/testcases/tests/server/MinOccursIsZero.xml
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/c/tests/auto_build/testcases/tests/server/MinOccursIsZero.xml?rev=377395&view=auto
==============================================================================
--- webservices/axis/trunk/c/tests/auto_build/testcases/tests/server/MinOccursIsZero.xml (added)
+++ webservices/axis/trunk/c/tests/auto_build/testcases/tests/server/MinOccursIsZero.xml Mon Feb 13 07:32:35 2006
@@ -0,0 +1,8 @@
+<service>
+    <name>MinOccursIsZero</name>
+    <description>MinOccursIsZero Service</description>
+    <serviceLang>cpp</serviceLang>
+    <serviceCode>MinOccursIsZero.cpp</serviceCode>
+    <wsdl>MinOccursIsZero.wsdl</wsdl>
+	<servicename></servicename>
+</service>