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">