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 2008/07/03 17:49:37 UTC

svn commit: r673717 - in /webservices/axis/trunk/c: include/axis/ include/axis/client/ src/cbindings/client/ src/common/ src/engine/client/ src/soap/ src/wsdl/org/apache/axis/wsdl/wsdl2ws/ src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/ src/wsdl/org/apache/ax...

Author: nadiramra
Date: Thu Jul  3 08:49:36 2008
New Revision: 673717

URL: http://svn.apache.org/viewvc?rev=673717&view=rev
Log:
AXISCPP-458 - Implement doc/literal wrapper-style correctly, add support for non-wrapper style when wrapper-style cannot be done or when user requests it.

Modified:
    webservices/axis/trunk/c/include/axis/IWrapperSoapDeSerializer.hpp
    webservices/axis/trunk/c/include/axis/client/Call.h
    webservices/axis/trunk/c/include/axis/client/Call.hpp
    webservices/axis/trunk/c/src/cbindings/client/CallC.cpp
    webservices/axis/trunk/c/src/common/Param.cpp
    webservices/axis/trunk/c/src/engine/client/Call.cpp
    webservices/axis/trunk/c/src/soap/SoapDeSerializer.cpp
    webservices/axis/trunk/c/src/soap/SoapDeSerializer.h
    webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/ParamWriter.java
    webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/WSDL2Ws.java
    webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/WrapperUtils.java
    webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/BeanParamWriter.java
    webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal/ClientStubWriter.java
    webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/BeanParamWriter.java
    webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/literal/ClientStubWriter.java
    webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/info/MethodInfo.java
    webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/info/ParameterInfo.java
    webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/info/Type.java
    webservices/axis/trunk/c/tests/auto_build/testcases/client/cpp/nillableComplexTypeClient.cpp
    webservices/axis/trunk/c/tests/auto_build/testcases/output/ValidXMLCharIsInterpretedAsCPPCommand_ServerResponse.expected
    webservices/axis/trunk/c/tests/auto_build/testcases/wsdls/ValidXMLCharIsInterpretedAsCPPCommand.wsdl

Modified: webservices/axis/trunk/c/include/axis/IWrapperSoapDeSerializer.hpp
URL: http://svn.apache.org/viewvc/webservices/axis/trunk/c/include/axis/IWrapperSoapDeSerializer.hpp?rev=673717&r1=673716&r2=673717&view=diff
==============================================================================
--- webservices/axis/trunk/c/include/axis/IWrapperSoapDeSerializer.hpp (original)
+++ webservices/axis/trunk/c/include/axis/IWrapperSoapDeSerializer.hpp Thu Jul  3 08:49:36 2008
@@ -57,17 +57,34 @@
     virtual ~IWrapperSoapDeSerializer(){};
 
     /**
-     * Check expected message has been received
+     * Check expected message has been received.  Consumes node.
      * 
      * @param pName SOAP element for message
      * @param pNamespace SOAP namespace for message
      * @return AXIS_SUCCESS if expected message has been received
      * 
+     * @deprecated see validateMessageBody below. 
+     * 
+     * @NOTE: do not remove method in order to keep backward compatibility.
+     * 
      */
     virtual int AXISCALL checkMessageBody(const AxisChar* pName, 
                                           const AxisChar* pNamespace)=0;
 
     /**
+     * Check expected message has been received. Throws 
+     * exception if message is not what was expected.
+     * 
+     * @param pName SOAP element for message
+     * @param pNamespace SOAP namespace for message
+     * @param consumeIt  indicate whether to consume node.
+     * 
+     */
+    virtual int AXISCALL validateMessageBody(const AxisChar* pName, 
+                                             const AxisChar* pNamespace,
+                                             bool consumeIt=true)=0;
+    
+    /**
      * Check if message is a fault
      * 
      * @param pName SOAP element for fault

Modified: webservices/axis/trunk/c/include/axis/client/Call.h
URL: http://svn.apache.org/viewvc/webservices/axis/trunk/c/include/axis/client/Call.h?rev=673717&r1=673716&r2=673717&view=diff
==============================================================================
--- webservices/axis/trunk/c/include/axis/client/Call.h (original)
+++ webservices/axis/trunk/c/include/axis/client/Call.h Thu Jul  3 08:49:36 2008
@@ -1675,12 +1675,30 @@
  * response namespace.
  * @return The return value is either AXIS_SUCCESS or AXIS_FAIL depending
  * if the name was found.
+ * 
+ * @deprecated use validateMessage().
  */
 AXISC_STORAGE_CLASS_INFO
 int axiscCallCheckMessage(AXISCHANDLE call, const AxiscChar * pName, 
 	const AxiscChar * pNamespace);
 
 /**
+ * Method to check that the SOAP message body contains the specified name and
+ * namespace.
+ *
+ * @param pName is a null terminated character string containing the response name.
+ * @param pNamespace is a null terminated character string containing the
+ * response namespace.
+ * @return The return value is either AXIS_SUCCESS or AXIS_FAIL depending
+ * if the name was found.
+ */
+AXISC_STORAGE_CLASS_INFO
+int axiscCallValidateMessage( AXISCHANDLE call,
+		                      const AxiscChar * pName,
+                              const AxiscChar * pNamespace,
+                              AxiscBool consumeIt); 
+
+/**
  * Method to check that the SOAP message fault contains the specified name and
  * namespace.
  *

Modified: webservices/axis/trunk/c/include/axis/client/Call.hpp
URL: http://svn.apache.org/viewvc/webservices/axis/trunk/c/include/axis/client/Call.hpp?rev=673717&r1=673716&r2=673717&view=diff
==============================================================================
--- webservices/axis/trunk/c/include/axis/client/Call.hpp (original)
+++ webservices/axis/trunk/c/include/axis/client/Call.hpp Thu Jul  3 08:49:36 2008
@@ -1608,11 +1608,27 @@
      * response namespace.
      * @return The return value is either AXIS_SUCCESS or AXIS_FAIL depending
      * if the name was found.
+     * 
+     * @deprecated use validateMessage().
      */
     int AXISCALL checkMessage( const AxisChar * pName,
                                const AxisChar * pNamespace);
 
     /**
+     * Method to check that the SOAP message body contains the specified name and
+     * namespace.
+     *
+     * @param pName is a null terminated character string containing the response name.
+     * @param pNamespace is a null terminated character string containing the
+     * response namespace.
+     * @return The return value is either AXIS_SUCCESS or AXIS_FAIL depending
+     * if the name was found.
+     */
+    int AXISCALL validateMessage( const AxisChar * pName,
+                                  const AxisChar * pNamespace,
+                                  bool  consumeIt=true);    
+    
+    /**
      * Method to check that the SOAP message fault contains the specified name and
      * namespace.
      *

Modified: webservices/axis/trunk/c/src/cbindings/client/CallC.cpp
URL: http://svn.apache.org/viewvc/webservices/axis/trunk/c/src/cbindings/client/CallC.cpp?rev=673717&r1=673716&r2=673717&view=diff
==============================================================================
--- webservices/axis/trunk/c/src/cbindings/client/CallC.cpp (original)
+++ webservices/axis/trunk/c/src/cbindings/client/CallC.cpp Thu Jul  3 08:49:36 2008
@@ -3232,13 +3232,20 @@
                           const AxiscChar * pName, 
                           const AxiscChar * pNamespace) 
 {
-    
-    
+    return axiscCallValidateMessage(call, pName, pNamespace, 1);
+}
+
+AXISC_STORAGE_CLASS_INFO
+int axiscCallValidateMessage( AXISCHANDLE call, 
+		                      const AxiscChar * pName,
+                              const AxiscChar * pNamespace,
+                              AxiscBool consumeIt)
+{
     Call *c = (Call*)call;
     
     try
     {
-        return c->checkMessage(pName,pNamespace);
+        return c->validateMessage(pName,pNamespace, (bool)(consumeIt != 0));
     }
     catch ( AxisException& e  )
     {

Modified: webservices/axis/trunk/c/src/common/Param.cpp
URL: http://svn.apache.org/viewvc/webservices/axis/trunk/c/src/common/Param.cpp?rev=673717&r1=673716&r2=673717&view=diff
==============================================================================
--- webservices/axis/trunk/c/src/common/Param.cpp (original)
+++ webservices/axis/trunk/c/src/common/Param.cpp Thu Jul  3 08:49:36 2008
@@ -166,16 +166,20 @@
             }
             else
             {
-                pSZ.serialize ("<", m_sName.c_str (), NULL); 
-                /* note : ">" is not serialized to enable the type's serializer
-                 * to add attributes 
-                 */
+            	// In order to support doc/lit unwrapped, m_sName (qualified element name) is passed as a null 
+            	// string in the stub code.  So we do not want to serialize null string in this case. 
+            	//
+            	// NOTE: ">" is not serialized to enable the type's serializer to add attributes.
+            	if (!m_sName.empty())
+                    pSZ.serialize ("<", m_sName.c_str (), NULL); 
+
                 TRACE_SERIALIZE_FUNCT_ENTRY(m_Value.pCplxObj->pSZFunct, m_Value.pCplxObj->pObject, &pSZ, false);
                 int stat = AXIS_FAIL;
                 stat = m_Value.pCplxObj->pSZFunct (m_Value.pCplxObj->pObject, &pSZ, false);
                 TRACE_SERIALIZE_FUNCT_EXIT(m_Value.pCplxObj->pSZFunct, stat);
 
-                pSZ.serialize ("</", m_sName.c_str (), ">\n", NULL);
+                if (!m_sName.empty())
+                    pSZ.serialize ("</", m_sName.c_str (), ">\n", NULL);
             }
             break;
         case XSD_ANY:

Modified: webservices/axis/trunk/c/src/engine/client/Call.cpp
URL: http://svn.apache.org/viewvc/webservices/axis/trunk/c/src/engine/client/Call.cpp?rev=673717&r1=673716&r2=673717&view=diff
==============================================================================
--- webservices/axis/trunk/c/src/engine/client/Call.cpp (original)
+++ webservices/axis/trunk/c/src/engine/client/Call.cpp Thu Jul  3 08:49:36 2008
@@ -986,9 +986,14 @@
 
 int Call::checkMessage( const AxisChar * pName, const AxisChar * pNamespace)
 {
-    m_nStatus = m_pIWSDZ->checkMessageBody( pName, pNamespace);
+    return validateMessage(pName, pNamespace);
+}
 
-    return m_nStatus;
+int Call::validateMessage( const AxisChar * pName, 
+		                   const AxisChar * pNamespace,
+		                   bool consumeIt)
+{
+    return m_pIWSDZ->validateMessageBody( pName, pNamespace, consumeIt);
 }
 
 void Call::getChardataAs(void** pValue, XSDTYPE type)

Modified: webservices/axis/trunk/c/src/soap/SoapDeSerializer.cpp
URL: http://svn.apache.org/viewvc/webservices/axis/trunk/c/src/soap/SoapDeSerializer.cpp?rev=673717&r1=673716&r2=673717&view=diff
==============================================================================
--- webservices/axis/trunk/c/src/soap/SoapDeSerializer.cpp (original)
+++ webservices/axis/trunk/c/src/soap/SoapDeSerializer.cpp Thu Jul  3 08:49:36 2008
@@ -417,6 +417,12 @@
 int SoapDeSerializer::
 checkMessageBody (const AxisChar * pName, const AxisChar * pNamespace)
 {
+	return validateMessageBody(pName, pNamespace, true);
+}
+
+int SoapDeSerializer::
+validateMessageBody(const AxisChar * pName, const AxisChar * pNamespace, bool consumeIt)
+{
     // Will throw exception if failure in parser
     if (AXIS_FAIL == getNextNode(true))
         return AXIS_FAIL;
@@ -434,8 +440,9 @@
     }
 
     // indicate node consumed
-    m_pNode = NULL; 
-
+    if (consumeIt)
+    	m_pNode = NULL; 
+    
     return AXIS_SUCCESS;
 }
 

Modified: webservices/axis/trunk/c/src/soap/SoapDeSerializer.h
URL: http://svn.apache.org/viewvc/webservices/axis/trunk/c/src/soap/SoapDeSerializer.h?rev=673717&r1=673716&r2=673717&view=diff
==============================================================================
--- webservices/axis/trunk/c/src/soap/SoapDeSerializer.h (original)
+++ webservices/axis/trunk/c/src/soap/SoapDeSerializer.h Thu Jul  3 08:49:36 2008
@@ -93,6 +93,7 @@
     int AXISCALL setNewSoapBody(AxisChar* pNewSoapBody);
     bool isAnyMustUnderstandHeadersLeft();
     int AXISCALL checkMessageBody(const AxisChar* pName, const AxisChar* pNamespace);
+    int AXISCALL validateMessageBody(const AxisChar * pName, const AxisChar * pNamespace, bool consumeIt=true);
     void* AXISCALL checkForFault(const AxisChar* pName,  const AxisChar* pNamespace);
     void initiateFault(const AxisChar* pNamespace);
     /* to get any header blocks left in the Deserializer */

Modified: webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/ParamWriter.java
URL: http://svn.apache.org/viewvc/webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/ParamWriter.java?rev=673717&r1=673716&r2=673717&view=diff
==============================================================================
--- webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/ParamWriter.java (original)
+++ webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/ParamWriter.java Thu Jul  3 08:49:36 2008
@@ -37,21 +37,17 @@
 
 public abstract class ParamWriter extends BasicFileWriter
 {
-    protected static final int INPUT_PARM = 0;
-    protected static final int RETURN_PARM = 1;
-    protected static final int COMMAN_PARM = 2;
-
     protected AttributeInfo extensionBaseAttrib = null;
-    /* no of parameters treated as attributes: ie first attributeParamCount of
-     * attribs will be treated as attributes
-     */
+
+    // first attributeParamCount of attribs will be treated as attributes
     protected int attributeParamCount = 0;
-    /* array of parameter types and parameter names of the this param */
+   
+    // array of parameter types and attributes 
     protected AttributeInfo[] attribs;
 
     protected WebServiceContext wscontext;
 
-    /* Type of this param */
+    // Type of this param 
     protected Type type;
 
     public ParamWriter(WebServiceContext wscontext, Type type) throws WrapperFault

Modified: webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/WSDL2Ws.java
URL: http://svn.apache.org/viewvc/webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/WSDL2Ws.java?rev=673717&r1=673716&r2=673717&view=diff
==============================================================================
--- webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/WSDL2Ws.java (original)
+++ webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/WSDL2Ws.java Thu Jul  3 08:49:36 2008
@@ -17,6 +17,7 @@
 
 package org.apache.axis.wsdl.wsdl2ws;
 import java.io.File;
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashSet;
@@ -50,6 +51,7 @@
 import org.apache.axis.wsdl.symbolTable.DefinedElement;
 import org.apache.axis.wsdl.symbolTable.DefinedType;
 import org.apache.axis.wsdl.symbolTable.Element;
+import org.apache.axis.wsdl.symbolTable.Parameters;
 import org.apache.axis.wsdl.symbolTable.PortTypeEntry;
 import org.apache.axis.wsdl.symbolTable.ServiceEntry;
 import org.apache.axis.wsdl.symbolTable.SymTabEntry;
@@ -270,12 +272,52 @@
             Operation op     = (Operation) oplist.next();
             MethodInfo minfo = new MethodInfo(op.getName());
             
+            // This chunk of code is new and we hope to use it more in the future to replace some of the 
+            // things we do to process parameters.
+            // When getOperationParameters() is called, the code, assuming user did not request unwrapped,
+            // will determine whether the operation is eligible for wrapped-style.   The bad thing is that
+            // isWrapped() is a method on the SymbolTable class.  So before processing an operation, 
+            // we call setWrapped(false) before calling getOperationParameters() so that we can determine 
+            // on a per-operation basis whether the operation is eligible for wrapped-style processing.
+            c_symbolTable.setWrapped(false);
+            Parameters opParams=null;
+            try
+            {
+                opParams = c_symbolTable.getOperationParameters(op, "", c_bindingEntry);
+                minfo.setOperationParameters(opParams);
+                minfo.setEligibleForWrapped(c_symbolTable.isWrapped());
+                
+                // mark the method as wrapped or unwrapped.
+                if (!c_wsdlWrappingStyle || !minfo.isEligibleForWrapped())
+                {
+                    minfo.setIsUnwrapped(true);
+                    minfo.setConsumeBodyOnMessageValidation(false);
+                }
+            }
+            catch (IOException e)
+            {
+                throw new WrapperFault(e);
+            }
+
+            if (c_verbose)
+            {
+                System.out.println("\n\n-----------------------------------------------");
+                System.out.println("Parameters for operation: " + op.getName()); 
+                System.out.println("-----------------------------------------------");
+                System.out.println(opParams);
+                System.out.println("-----------------------------------------------");
+            }
+            
             //setting the faults
             addFaultInfo(op.getFaults(), minfo);
             
             //add each parameter to parameter list
             if ("document".equals(c_bindingEntry.getBindingStyle().getName()))
+            {
+                if (c_userRequestedWSDLWrappingStyle && !minfo.isEligibleForWrapped())
+                    System.out.println("INFORMATIONAL: Operation '" + op.getName() + "' is not eligible for wrapper-style, using non-wrapper style.");
                 addDocumentStyleInputMessageToMethodInfo(op, minfo);
+            }
             else
                 addRPCStyleInputMessageToMethodInfo(op, minfo);
 
@@ -418,10 +460,11 @@
         // For unwrapped style, objects are used for the parameters (i.e. classes or structures).
         
         Iterator names = type.getElementnames();
-        if (c_wsdlWrappingStyle)
+        if (!minfo.isUnwrapped())
         {
             if (!names.hasNext())
             {
+                // TODO what if not simple?
                 if (type.isSimpleType())
                 {
                     String elementName = (String) element.getQName().getLocalPart();
@@ -429,10 +472,10 @@
                     pinfo.setType(type);
                     pinfo.setParamName(elementName, c_typeMap);
                     pinfo.setElementName(element.getQName());
-                    pinfo.setGetElementAsCharData(true);
                     if (type.getName().equals(CUtils.anyTypeQname))
                         pinfo.setAnyType(true);
                     minfo.addOutputParameter(pinfo);                    
+                    minfo.setConsumeBodyOnMessageValidation(false);
                 }
             }
             else
@@ -471,18 +514,21 @@
             String elementName = (String) element.getQName().getLocalPart();
             ParameterInfo pinfo = new ParameterInfo();
             pinfo.setType(type);
+            type.setIsUnwrappedOutputType(true);
             pinfo.setParamName(elementName, c_typeMap);
             
             if (!names.hasNext() && type.isSimpleType())
-            {
                 pinfo.setElementName(element.getQName());
-                pinfo.setGetElementAsCharData(true);                
-            }
             else
                 pinfo.setElementName(type.getName());
             
             if (type.getName().equals(CUtils.anyTypeQname))
                 pinfo.setAnyType(true);
+            
+            // Let us be nice and uppercase the first character in type name, 
+            // in addition to resolving method name/type conflicts.
+            type.setLanguageSpecificName(generateNewTypeName(type, minfo));
+            
             minfo.addOutputParameter(pinfo);
         }
     }
@@ -572,7 +618,7 @@
 
         // For wrapped style, inner attributes and elements are added as parameters.
         // For unwrapped style, objects are used for the parameters (i.e. classes or structures).
-        if (c_wsdlWrappingStyle)
+        if (!minfo.isUnwrapped())
         {
             // Add input elements to method info
             Iterator elementNames = type.getElementnames();
@@ -625,16 +671,26 @@
         }
         else
         { 
-            String elementName = (String) element.getQName().getLocalPart();
+            String elementName;
+            
+            if (element != null)
+                elementName = element.getQName().getLocalPart();
+            else
+                elementName = type.getName().getLocalPart();
             
             ParameterInfo pinfo = new ParameterInfo();
             
             pinfo.setType(type);
+            type.setIsUnwrappedInputType(true);
             pinfo.setParamName(elementName, c_typeMap);
             pinfo.setElementName(type.getName());
             if (type.getName().equals(CUtils.anyTypeQname))
                 pinfo.setAnyType(true);
 
+            // Let us be nice and uppercase the first character in type name, 
+            // in addition to resolving method name/type conflicts.
+            type.setLanguageSpecificName(generateNewTypeName(type, minfo));
+            
             minfo.addInputParameter(pinfo);
         }
     }
@@ -1274,7 +1330,8 @@
                 + "-l<c++|c>              target language (c++|c) - default is c++\n"
                 + "-s<server|client>      target side (server|client) - default is server\n"
                 + "-v, -verbose           be verbose\n"
-                + "-t<timeout>            uri resolution timeout in seconds - default is 0 (no timeout)"
+                + "-t<timeout>            uri resolution timeout in seconds - default is 0 (no timeout)\n"
+                + "-w<wrapped|unwrapped>  generate wrapper style or not - default is wrapped\n"
                 );
     }
     
@@ -1334,10 +1391,32 @@
     }
 
     /**
-     * @return the c_targetoutputLocation
+     * Returns absolute path to where the generated code will be located. 
+     * 
+     * @return the absolute path to the target location
      */
     public String getTargetOutputLocation()
     {
         return c_targetoutputLocation;
     }
+    
+    /**
+     * Resolves name conflict between a method name and a type name. 
+     * When doing document-literal, usually the name of the wrapper element is same as the 
+     * operation name. 
+     * 
+     * @return the new type name that does not conflict with the operation name.
+     */
+    private String generateNewTypeName(Type type, MethodInfo minfo)
+    {
+        String minfo_nm = minfo.getMethodname();
+        String type_nm  = type.getLanguageSpecificName();
+        
+        String newName = WrapperUtils.capitalizeFirstCharacter(type_nm);
+
+        if (!minfo_nm.equals(newName))
+            return newName;
+
+        return newName + "_t";
+    }
 }

Modified: webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/WrapperUtils.java
URL: http://svn.apache.org/viewvc/webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/WrapperUtils.java?rev=673717&r1=673716&r2=673717&view=diff
==============================================================================
--- webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/WrapperUtils.java (original)
+++ webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/WrapperUtils.java Thu Jul  3 08:49:36 2008
@@ -77,7 +77,7 @@
      * @param value String 
      * @return changed String 
      */
-    public static String capitalizeFirstCaractor(String value)
+    public static String capitalizeFirstCharacter(String value)
     {
         char[] chars = value.toCharArray();
         chars[0] = Character.toUpperCase(value.charAt(0));

Modified: webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/BeanParamWriter.java
URL: http://svn.apache.org/viewvc/webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/BeanParamWriter.java?rev=673717&r1=673716&r2=673717&view=diff
==============================================================================
--- webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/BeanParamWriter.java (original)
+++ webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/BeanParamWriter.java Thu Jul  3 08:49:36 2008
@@ -108,7 +108,8 @@
         {
             CUtils.printBlockComment(writer, "No attributes or elements to serialize.");
         
-            writer.write("\taxiscSoapSerializerSerialize(pSZ,\">\", NULL);\n");
+            if (!type.isUnwrappedInputType())
+               writer.write("\taxiscSoapSerializerSerialize(pSZ,\">\", NULL);\n");
 
             writeSerializeExtensionCode();
             
@@ -129,7 +130,8 @@
         
         writer.write("\tif ( param == NULL )\n\t{\n");
         writer.write("\t\taxiscSoapSerializerSerializeAsAttribute(pSZ, \"xsi:nil\", 0, (void*)&(xsdc_boolean_true), XSDC_BOOLEAN);\n");
-        writer.write("\t\taxiscSoapSerializerSerialize(pSZ, \">\", NULL);\n");
+        if (!type.isUnwrappedInputType())
+            writer.write("\t\taxiscSoapSerializerSerialize(pSZ, \">\", NULL);\n");
         writer.write("\t\treturn AXISC_SUCCESS;\n");
         writer.write("\t}\n");
         
@@ -197,7 +199,7 @@
             writer.write(", NULL);\n\t}\n");
         }               
         
-        if(wscontext.getWrapInfo().getWrapperStyle().equals("document"))
+        if (wscontext.getWrapInfo().getWrapperStyle().equals("document") && !type.isUnwrappedInputType())
             writer.write("\taxiscSoapSerializerSerialize(pSZ, \">\", 0);\n");
         
         //=============================================================================

Modified: webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal/ClientStubWriter.java
URL: http://svn.apache.org/viewvc/webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal/ClientStubWriter.java?rev=673717&r1=673716&r2=673717&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 Thu Jul  3 08:49:36 2008
@@ -469,7 +469,11 @@
                 else
                     writer.write("\t{\n"); // following was added to instantiate variables on the fly
                 
-                if (namespace.length () == 0)
+                if (minfo.isUnwrapped())
+                {
+                    writer.write ("\t\tchar cPrefixAndParamName" + i + "[" + "] = \"\";\n");                    
+                }                
+                else if (namespace.length () == 0)
                 {
                     writer.write ("\t\tchar cPrefixAndParamName"
                               + i + "[" + "] = \"" + parameterName + "\";\n");
@@ -578,14 +582,36 @@
 
         writer.write("\n");
         
-
+        //=============================================================================
+        // Invoke web service - one-way or two-way message processing
+        //=============================================================================  
+        
+        // Tricky part...if in the WSDL the response is an element that references a type, for example:
+        // 
+        // <simpleType name="ActionResultType">
+        //    <restriction base="xsd:string">
+        //        <enumeration value="Success"/>
+        //        <enumeration value="Connection Failure"/>
+        //    </restriction>
+        // </simpleType>
+        // <element name="callControlResponse" type="tns:ActionResultType"/>
+        //
+        // Then the SOAP response looks like the following:
+        //  <ns37:callControlResponse xmlns:ns37="http://ws.xxx.com/ip/">Success</ns37:callControlResponse>
+        //
+        // So we need to validate response body element w/out consuming node. This also holds true when doing
+        // unwrapped methods.
+        String consumeBodyNode="true_";
+        if (!minfo.consumeBodyOnMessageValidation())
+            consumeBodyNode = "false_";
+        
         if (minfo.getOutputMessage () != null)
         {
             CUtils.printBlockComment(writer, "Invoke web service, send/receive operation. Handle output parameters, if any.");
             writer.write("\tif (AXISC_SUCCESS == axiscCallSendAndReceive(call))\n\t{\n");       
-            writer.write("\t\tif(AXISC_SUCCESS == axiscCallCheckMessage(call, \""
+            writer.write("\t\tif(AXISC_SUCCESS == axiscCallValidateMessage(call, \""
                 + minfo.getOutputMessage().getLocalPart() + "\", \""
-                + minfo.getOutputMessage().getNamespaceURI() + "\"))\n\t\t{\n");
+                + minfo.getOutputMessage().getNamespaceURI() + "\", " + consumeBodyNode + "))\n\t\t{\n");
         }
         else
         {
@@ -834,32 +860,9 @@
         {
             if (returntype.isNillable () || returntype.isOptional() || CUtils.isPointerType(outparamType))
             {
-                // Tricky part...if in the WSDL the response is an element that references a type, for example:
-                // 
-                // <simpleType name="ActionResultType">
-                //    <restriction base="xsd:string">
-                //        <enumeration value="Success"/>
-                //        <enumeration value="Connection Failure"/>
-                //    </restriction>
-                // </simpleType>
-                // <element name="callControlResponse" type="tns:ActionResultType"/>
-                //
-                // Then the SOAP response looks like the following:
-                //  <ns37:callControlResponse xmlns:ns37="http://ws.xxx.com/ip/">Success</ns37:callControlResponse>
-                //
-                // So we need to get the data without consuming any elements since the root has already been consumed 
-                // by checkMessage() call. May be a hack but not sure what else can be done at this time.
-                if (returntype.getElementAsCharData())
-                {
-                    String xsdType = CUtils.getXSDTypeForBasicType(outparamType);
-                    writer.write("\t\t\t\taxiscCallGetChardataAs(call, (void **)&Ret, " + xsdType + ");\n");
-                }
-                else
-                {            
-                    writer.write( "\t\t\tRet = axiscCall"
-                            + CUtils.getParameterGetValueMethodName( outparamType, false) 
-                            + "(call, \"" + returntype.getParamNameAsSOAPString() + "\", 0);\n");
-                }
+               writer.write( "\t\t\tRet = axiscCall"
+                       + CUtils.getParameterGetValueMethodName( outparamType, false) 
+                       + "(call, \"" + returntype.getParamNameAsSOAPString() + "\", 0);\n");
                 writer.write( "\t\t}\n");
             }
             else

Modified: webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/BeanParamWriter.java
URL: http://svn.apache.org/viewvc/webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/BeanParamWriter.java?rev=673717&r1=673716&r2=673717&view=diff
==============================================================================
--- webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/BeanParamWriter.java (original)
+++ webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/BeanParamWriter.java Thu Jul  3 08:49:36 2008
@@ -331,7 +331,8 @@
         {
             CUtils.printBlockComment(writer, "No attributes or elements to serialize.");
             
-            writer.write("\tpSZ->serialize(\">\", NULL);\n");
+            if (!type.isUnwrappedInputType())
+                writer.write("\tpSZ->serialize(\">\", NULL);\n");
 
             writeSerializeExtensionCode();
             
@@ -350,7 +351,9 @@
         
         writer.write("\tif ( param == NULL )\n\t{\n");
         writer.write("\t\tpSZ->serializeAsAttribute( \"xsi:nil\", 0, (void*)&(xsd_boolean_true), XSD_BOOLEAN);\n");
-        writer.write("\t\tpSZ->serialize( \">\", NULL);\n");
+        
+        if (!type.isUnwrappedInputType())
+            writer.write("\t\tpSZ->serialize( \">\", NULL);\n");
         writer.write("\t\treturn AXIS_SUCCESS;\n");
         writer.write("\t}\n");
         
@@ -420,7 +423,7 @@
             writer.write(", NULL);\n\t}\n");
         }               
         
-        if(wscontext.getWrapInfo().getWrapperStyle().equals("document"))
+        if (wscontext.getWrapInfo().getWrapperStyle().equals("document") && !type.isUnwrappedInputType())
             writer.write("\tpSZ->serialize( \">\", 0);\n");
         
         //=============================================================================

Modified: webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/literal/ClientStubWriter.java
URL: http://svn.apache.org/viewvc/webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/literal/ClientStubWriter.java?rev=673717&r1=673716&r2=673717&view=diff
==============================================================================
--- webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/literal/ClientStubWriter.java (original)
+++ webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/literal/ClientStubWriter.java Thu Jul  3 08:49:36 2008
@@ -480,7 +480,12 @@
                     tab2 = "\t";
                 }
                 
-                if (namespace.length () == 0)
+                // If unwrapped, we pass in null string for qualified element name. 
+                if (minfo.isUnwrapped())
+                {
+                    writer.write (tab2 + "\t\tchar cPrefixAndParamName" + i + "[" + "] = \"\";\n");                    
+                }
+                else if (namespace.length () == 0)
                 {
                     writer.write (tab2 + "\t\tchar cPrefixAndParamName"
                               + i + "[" + "] = \"" + parameterName + "\";\n");
@@ -590,13 +595,32 @@
         // Invoke web service - one-way or two-way message processing
         //=============================================================================        
 
+        // Tricky part...if in the WSDL the response is an element that references a type, for example:
+        // 
+        // <simpleType name="ActionResultType">
+        //    <restriction base="xsd:string">
+        //        <enumeration value="Success"/>
+        //        <enumeration value="Connection Failure"/>
+        //    </restriction>
+        // </simpleType>
+        // <element name="callControlResponse" type="tns:ActionResultType"/>
+        //
+        // Then the SOAP response looks like the following:
+        //  <ns37:callControlResponse xmlns:ns37="http://ws.xxx.com/ip/">Success</ns37:callControlResponse>
+        //
+        // So we need to validate response body element w/out consuming node. This also holds true when doing
+        // unwrapped methods.
+        String consumeBodyNode="true";
+        if (!minfo.consumeBodyOnMessageValidation())
+            consumeBodyNode = "false";
+
         if (minfo.getOutputMessage () != null)
         {
             CUtils.printBlockComment(writer, "Invoke web service, send/receive operation. Handle output parameters, if any.");
             writer.write ("\t\tif (AXIS_SUCCESS == m_pCall->sendAndReceive())\n\t\t{\n");
-            writer.write ("\t\t\tif(AXIS_SUCCESS == m_pCall->checkMessage(\""
+            writer.write ("\t\t\tif(AXIS_SUCCESS == m_pCall->validateMessage(\""
                   + minfo.getOutputMessage ().getLocalPart () + "\", \""
-                  + minfo.getOutputMessage ().getNamespaceURI () + "\"))\n\t\t\t{\n");
+                  + minfo.getOutputMessage ().getNamespaceURI () + "\", " + consumeBodyNode + "))\n\t\t\t{\n");
         }
         else
         {
@@ -841,32 +865,9 @@
         {
             if (returntype.isNillable () || returntype.isOptional() || CUtils.isPointerType(outparamType))
             {
-                // Tricky part...if in the WSDL the response is an element that references a type, for example:
-                // 
-                // <simpleType name="ActionResultType">
-                //    <restriction base="xsd:string">
-                //        <enumeration value="Success"/>
-                //        <enumeration value="Connection Failure"/>
-                //    </restriction>
-                // </simpleType>
-                // <element name="callControlResponse" type="tns:ActionResultType"/>
-                //
-                // Then the SOAP response looks like the following:
-                //  <ns37:callControlResponse xmlns:ns37="http://ws.xxx.com/ip/">Success</ns37:callControlResponse>
-                //
-                // So we need to get the data without consuming any elements since the root has already been consumed 
-                // by checkMessage() call. May be a hack but not sure what else can be done at this time.
-                if (returntype.getElementAsCharData())
-                {
-                    String xsdType = CUtils.getXSDTypeForBasicType(outparamType);
-                    writer.write("\t\t\t\tm_pCall->getChardataAs((void **)&Ret, " + xsdType + ");\n");
-                }
-                else
-                {
-                    writer.write( "\t\t\t\tRet = m_pCall->" 
-                            + CUtils.getParameterGetValueMethodName( outparamType, false) 
-                            + "(\"" + returntype.getParamNameAsSOAPString() + "\", 0);\n");
-                }
+                writer.write( "\t\t\t\tRet = m_pCall->" 
+                        + CUtils.getParameterGetValueMethodName( outparamType, false) 
+                        + "(\"" + returntype.getParamNameAsSOAPString() + "\", 0);\n");
             }
             else
             {

Modified: webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/info/MethodInfo.java
URL: http://svn.apache.org/viewvc/webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/info/MethodInfo.java?rev=673717&r1=673716&r2=673717&view=diff
==============================================================================
--- webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/info/MethodInfo.java (original)
+++ webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/info/MethodInfo.java Thu Jul  3 08:49:36 2008
@@ -47,6 +47,10 @@
     private String inputNamespaceURI = null;
     private String outputNamespaceURI = null;
 
+    private boolean eligibleForWrapped=true;
+    private boolean doUnwrapped=false;
+    private boolean consumeBodyOnMessageValidation=true;
+
     public MethodInfo(String methodname)
     {
         this.methodname = methodname;
@@ -204,4 +208,34 @@
     {
         return operationParameters;
     }
+
+    public void setEligibleForWrapped(boolean wrapped)
+    {
+        this.eligibleForWrapped = wrapped;
+    }
+    
+    public boolean isEligibleForWrapped()
+    {
+        return eligibleForWrapped;
+    }
+    
+    public void setIsUnwrapped(boolean unwrapped)
+    {
+        this.doUnwrapped = unwrapped;
+    }
+    
+    public boolean isUnwrapped()
+    {
+        return doUnwrapped;
+    }
+
+    public boolean consumeBodyOnMessageValidation()
+    {
+        return consumeBodyOnMessageValidation;
+    }
+
+    public void setConsumeBodyOnMessageValidation(boolean b)
+    {
+        this.consumeBodyOnMessageValidation = b;
+    }
 }

Modified: webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/info/ParameterInfo.java
URL: http://svn.apache.org/viewvc/webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/info/ParameterInfo.java?rev=673717&r1=673716&r2=673717&view=diff
==============================================================================
--- webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/info/ParameterInfo.java (original)
+++ webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/info/ParameterInfo.java Thu Jul  3 08:49:36 2008
@@ -40,7 +40,6 @@
     private boolean isAttribute = false;
     private boolean isNillable = false;
     private boolean isOptional = false;
-    private boolean doGetElementAsCharData=false;
 
     public ParameterInfo()
     {}
@@ -238,15 +237,4 @@
     {
         this.methodName = methodName;
     }
-
-    public void setGetElementAsCharData(boolean b)
-    {
-        this.doGetElementAsCharData = true;
-        
-    }
-
-    public boolean getElementAsCharData()
-    {
-        return doGetElementAsCharData;
-    }
 }

Modified: webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/info/Type.java
URL: http://svn.apache.org/viewvc/webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/info/Type.java?rev=673717&r1=673716&r2=673717&view=diff
==============================================================================
--- webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/info/Type.java (original)
+++ webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/info/Type.java Thu Jul  3 08:49:36 2008
@@ -108,6 +108,12 @@
      */
     private Vector vRelatedTypes = new Vector();
     
+    // is type the output type for unwrapped doc/lit operation?
+    private boolean isUnwrappedOutputType = false;
+    
+    // is type the input type for unwrapped doc/lit operation?
+    private boolean isUnwrappedInputType  = false;
+    
     public Type(QName name, String languageSpecificName, String language)
     {
         this.languageSpecificName = languageSpecificName;
@@ -498,4 +504,25 @@
         this.restriction = restriction;
     }
     // ^^^ FJP - 17667
+
+
+    public void setIsUnwrappedOutputType(boolean b)
+    {
+        this.isUnwrappedOutputType  = b;  
+    }
+
+    public boolean isUnwrappedOutputType()
+    {
+        return isUnwrappedOutputType;
+    }
+    
+    public void setIsUnwrappedInputType(boolean b)
+    {
+        this.isUnwrappedInputType    = b;  
+    }
+
+    public boolean isUnwrappedInputType()
+    {
+        return isUnwrappedInputType;
+    }
 }

Modified: webservices/axis/trunk/c/tests/auto_build/testcases/client/cpp/nillableComplexTypeClient.cpp
URL: http://svn.apache.org/viewvc/webservices/axis/trunk/c/tests/auto_build/testcases/client/cpp/nillableComplexTypeClient.cpp?rev=673717&r1=673716&r2=673717&view=diff
==============================================================================
Binary files - no diff available.

Modified: webservices/axis/trunk/c/tests/auto_build/testcases/output/ValidXMLCharIsInterpretedAsCPPCommand_ServerResponse.expected
URL: http://svn.apache.org/viewvc/webservices/axis/trunk/c/tests/auto_build/testcases/output/ValidXMLCharIsInterpretedAsCPPCommand_ServerResponse.expected?rev=673717&r1=673716&r2=673717&view=diff
==============================================================================
--- webservices/axis/trunk/c/tests/auto_build/testcases/output/ValidXMLCharIsInterpretedAsCPPCommand_ServerResponse.expected (original)
+++ webservices/axis/trunk/c/tests/auto_build/testcases/output/ValidXMLCharIsInterpretedAsCPPCommand_ServerResponse.expected Thu Jul  3 08:49:36 2008
@@ -26,7 +26,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 <soapenv:Body>
-<ns1:test1Request xmlns:ns1="http://localhost/axis/ValidXMLCharIsInterpretedAsCPPCommand">
+<ns1:Test1WithComplexResponse xmlns:ns1="http://localhost/axis/ValidXMLCharIsInterpretedAsCPPCommand">
 <ns1:Element xmlns:ns2="ValidXMLCharIsInterpretedAsCPPCommandTypes">
 <ns2:arg.WithADot>8</ns2:arg.WithADot>
 <ns2:arg_WithAnUnderscore>9</ns2:arg_WithAnUnderscore>
@@ -36,7 +36,7 @@
 <ns2:arg.With.TwoDots>13</ns2:arg.With.TwoDots>
 <ns2:arg..WithTwoDotsInline>14</ns2:arg..WithTwoDotsInline>
 </ns1:Element>
-</ns1:test1Request>
+</ns1:Test1WithComplexResponse>
 </soapenv:Body>
 </soapenv:Envelope>
 0

Modified: webservices/axis/trunk/c/tests/auto_build/testcases/wsdls/ValidXMLCharIsInterpretedAsCPPCommand.wsdl
URL: http://svn.apache.org/viewvc/webservices/axis/trunk/c/tests/auto_build/testcases/wsdls/ValidXMLCharIsInterpretedAsCPPCommand.wsdl?rev=673717&r1=673716&r2=673717&view=diff
==============================================================================
--- webservices/axis/trunk/c/tests/auto_build/testcases/wsdls/ValidXMLCharIsInterpretedAsCPPCommand.wsdl (original)
+++ webservices/axis/trunk/c/tests/auto_build/testcases/wsdls/ValidXMLCharIsInterpretedAsCPPCommand.wsdl Thu Jul  3 08:49:36 2008
@@ -33,7 +33,7 @@
    <import namespace="ValidXMLCharIsInterpretedAsCPPCommandTypes"
   	  schemaLocation="ValidXMLCharIsInterpretedAsCPPCommand.xsd"/>
 
-   <xsd:element name="test1Request">
+   <xsd:element name="test1">
     <xsd:complexType>
      <xsd:sequence>
       <xsd:element maxOccurs="1" minOccurs="1" name="Element" nillable="true" type="ns99:test1Punctuation"/>
@@ -49,55 +49,15 @@
     </complexType>
    </element>
    
-
-<!--     <xsd:element name="test2Request">
-    <xsd:complexType>
-     <xsd:sequence>
-      <xsd:element maxOccurs="1" minOccurs="1" name="Element" nillable="true" type="ns99:test2Logical"/>
-     </xsd:sequence>
-    </xsd:complexType>
-   </xsd:element>
-
-   <element name="test2Response">
-    <complexType>
-     <sequence>
-      <element name="return" type="xsd:int"/>
-     </sequence>
-    </complexType>
-   </element>
-
-   <xsd:element name="test3Request">
-    <xsd:complexType>
-     <xsd:sequence>
-      <xsd:element maxOccurs="1" minOccurs="1" name="Element" nillable="true" type="ns99:test3Mathematical"/>
-     </xsd:sequence>
-    </xsd:complexType>
-   </xsd:element>
-
-   <element name="test3Response">
-    <complexType>
-     <sequence>
-      <element name="return" type="xsd:int"/>
-     </sequence>
-    </complexType>
-   </element>
-
-   <xsd:element name="test4Request">
+   
+   <xsd:element name="Test1WithComplexResponse">
     <xsd:complexType>
      <xsd:sequence>
-      <xsd:element maxOccurs="1" minOccurs="1" name="Element" nillable="true" type="ns99:test4Miscellaneous"/>
+      <xsd:element maxOccurs="1" minOccurs="1" name="Element" nillable="true" type="ns99:test1Punctuation"/>
      </xsd:sequence>
     </xsd:complexType>
    </xsd:element>
-
-   <element name="test4Response">
-    <complexType>
-     <sequence>
-      <element name="return" type="xsd:int"/>
-     </sequence>
-    </complexType>
-   </element>
--->
+   
   </schema>
  </wsdl:types>
 
@@ -105,34 +65,15 @@
       <wsdl:part element="impl:test1Response" name="parameters"/>
    </wsdl:message>
 
-<!--      <wsdl:message name="test2Response">
-      <wsdl:part element="impl:test2Response" name="parameters"/>
-   </wsdl:message>
 
-   <wsdl:message name="test3Response">
-      <wsdl:part element="impl:test3Response" name="parameters"/>
-   </wsdl:message>
-
-   <wsdl:message name="test4Response">
-      <wsdl:part element="impl:test4Response" name="parameters"/>
-   </wsdl:message>
--->
    <wsdl:message name="test1Request">
-      <wsdl:part element="impl:test1Request" name="parameters"/>
+      <wsdl:part element="impl:test1" name="parameters"/>
    </wsdl:message>
 
-<!--   <wsdl:message name="test2Request">
-      <wsdl:part element="impl:test2Request" name="parameters"/>
+   <wsdl:message name="test2Request">
+      <wsdl:part element="impl:Test1WithComplexResponse" name="parameters"/>
    </wsdl:message>
 
-   <wsdl:message name="test3Request">
-      <wsdl:part element="impl:test3Request" name="parameters"/>
-   </wsdl:message>
-
-   <wsdl:message name="test4Request">
-      <wsdl:part element="impl:test4Request" name="parameters"/>
-   </wsdl:message>
--->
    <wsdl:portType name="ValidXMLCharIsInterpretedAsCPPCommand">
       <wsdl:operation name="test1">
          <wsdl:input message="impl:test1Request" name="test1Request"/>
@@ -140,20 +81,10 @@
       </wsdl:operation>
 
        <wsdl:operation name="Test1WithComplexResponse">
-         <wsdl:input message="impl:test1Request" name="test1Request"/>
-         <wsdl:output message="impl:test1Request" name="test1Request"/>
+         <wsdl:input message="impl:test2Request" name="test2Request"/>
+         <wsdl:output message="impl:test2Request" name="test2Request"/>
       </wsdl:operation>
 
-<!--      <wsdl:operation name="test3">
-         <wsdl:input message="impl:test3Request" name="test3Request"/>
-         <wsdl:output message="impl:test3Response" name="test3Response"/>
-      </wsdl:operation>
-
-      <wsdl:operation name="test4">
-         <wsdl:input message="impl:test4Request" name="test4Request"/>
-         <wsdl:output message="impl:test4Response" name="test4Response"/>
-      </wsdl:operation>
--->
    </wsdl:portType>
 
    <wsdl:binding name="ValidXMLCharIsInterpretedAsCPPCommandSoapBinding" type="impl:ValidXMLCharIsInterpretedAsCPPCommand">
@@ -170,34 +101,14 @@
 
       <wsdl:operation name="Test1WithComplexResponse">
          <wsdlsoap:operation soapAction="ValidXMLCharIsInterpretedAsCPPCommand#Test1WithComplexResponse"/>
-         <wsdl:input name="test1Request">
+         <wsdl:input name="test2Request">
             <wsdlsoap:body use="literal"/>
          </wsdl:input>
-         <wsdl:output name="test1Request">
+         <wsdl:output name="test2Request">
             <wsdlsoap:body use="literal"/>
          </wsdl:output>
       </wsdl:operation>
 
-<!--       <wsdl:operation name="test3">
-         <wsdlsoap:operation soapAction="ValidXMLCharIsInterpretedAsCPPCommand#test3"/>
-         <wsdl:input name="test3Request">
-            <wsdlsoap:body use="literal"/>
-         </wsdl:input>
-         <wsdl:output name="test3Response">
-            <wsdlsoap:body use="literal"/>
-         </wsdl:output>
-      </wsdl:operation>
-
-      <wsdl:operation name="test4">
-         <wsdlsoap:operation soapAction="ValidXMLCharIsInterpretedAsCPPCommand#test4"/>
-         <wsdl:input name="test4Request">
-            <wsdlsoap:body use="literal"/>
-         </wsdl:input>
-         <wsdl:output name="test4Response">
-            <wsdlsoap:body use="literal"/>
-         </wsdl:output>
-      </wsdl:operation>
--->
    </wsdl:binding>
 
    <wsdl:service name="ValidXMLCharIsInterpretedAsCPPCommand">