You are viewing a plain text version of this content. The canonical link for it is here.
Posted to c-dev@axis.apache.org by Aleksander Slominski <as...@cs.indiana.edu> on 2004/06/01 17:47:30 UTC

Re: c++ WSDL2Ws creates an extra input parameter

Ben Souther wrote:

>Thank you, Aleksander.
>
>Is there any known work around for this, preferably on the client (c++) side?
>
>  
>
until it is resolved i would just do global search in source code and 
replace string HTTP/1.1 with 1.0 :)

also you should post this question to axis-c-user and axis-c-dev mailing 
lists (i have CCed them now).

alek

 


-------- Original Message --------

Subject: 	Re: c++ WSDL2Ws creates an extra input parameter
Date: 	Fri, 28 May 2004 18:11:56 -0500
From: 	Aleksander Slominski <as...@cs.indiana.edu>
To: 	axis-user@ws.apache.org
References: 	<20...@fwdco.com> 
<20...@fwdco.com>



Ben Souther wrote:

 >More Data......
 >
 >Using the tcpmon application, I was able to grab all of the data being 
swapped
 >between the client and server.
 >
 >For some reason, Axis (server, java) returns the returns the response
 >"chunked" for the C++ Client but not for the Java client.
 >
 >
the reason is that AXIS C++ client sends HTTP 1.1 request and support in
clinet for chunked is then assumed by server (tomcat)::
POST /file_manager/services/EchoCaps HTTP/1.1

alek


 >I assume the delay is due to the connection not closing correctly.
 >The C++ app probaly returns after the connection times out???
 >
 >Again, any help is appreciated
 >-Ben
 >
 >Here is the data intercepted with tcpmon:....
 >=================================
 >FROM THE JAVA CLIENT
 >=================================
 >Listen Port: 8888
 >Target Host: 127.0.0.1
 >Target Port: 8080
 >==== Request ====
 >POST /file_manager/services/EchoCaps HTTP/1.0
 >Content-Type: text/xml; charset=utf-8
 >Accept: application/soap+xml, application/dime, multipart/related, text/*
 >User-Agent: Axis/1.1RC2
 >Host: 127.0.0.1
 >Cache-Control: no-cache
 >Pragma: no-cache
 >SOAPAction: ""
 >Content-Length: 473
 >
 ><?xml version="1.0" encoding="UTF-8"?>
 ><soapenv:Envelope 
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
 > xmlns:xsd="http://www.w3.org/2001/XMLSchema"
 > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 > <soapenv:Body>
 > <ns1:capitalize
 >soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
 >xmlns:ns1="EchoCaps">
 > <inputString xsi:type="xsd:string">String from the java
 >client</inputString>
 > </ns1:capitalize>
 > </soapenv:Body>
 ></soapenv:Envelope>
 >
 >
 >==== Response ====
 >HTTP/1.1 200 OK
 >Content-Type: text/xml;charset=utf-8
 >Date: Fri, 28 May 2004 20:17:24 GMT
 >Server: Apache-Coyote/1.1
 >Connection: close
 >
 ><?xml version="1.0" encoding="UTF-8"?>
 ><soapenv:Envelope 
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
 > xmlns:xsd="http://www.w3.org/2001/XMLSchema"
 > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 > <soapenv:Body>
 > <ns1:capitalizeResponse
 > soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
 > xmlns:ns1="EchoCaps">
 > <EchoCaps xsi:type="xsd:string">STRING FROM THE JAVA CLIENT</EchoCaps>
 > </ns1:capitalizeResponse>
 > </soapenv:Body>
 ></soapenv:Envelope>
 >
 >
 >
 >
 >===================
 >FROM THE C++ CLIENT..........
 >===================
 >Listen Port: 8888
 >Target Host: 127.0.0.1
 >Target Port: 8080
 >==== Request ====
 >POST /file_manager/services/EchoCaps HTTP/1.1
 >Host: 127.0.0.1
 >Content-Type: text/xml; charset=UTF-8
 >SOAPAction: "EchoCaps#capitalize"
 >Content-Length: 439
 >
 ><?xml version='1.0' encoding='utf-8' ?>
 ><SOAP-ENV:Envelope 
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
 > xmlns:xsd="http://www.w3.org/2001/XMLSchema"
 > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 > <SOAP-ENV:Body>
 > <ns1:capitalize
 >xmlns:ns1="http://192.168.0.103:8888/file_manager/services/EchoCaps">
 > <inputString xsi:type="xsd:string">Input from C++
 >Client</inputString>
 > </ns1:capitalize>
 > </SOAP-ENV:Body>
 ></SOAP-ENV:Envelope>
 >
 >
 >==== Response ====
 >HTTP/1.1 200 OK
 >Content-Type: text/xml;charset=utf-8
 >Transfer-Encoding: chunked
 >Date: Fri, 28 May 2004 20:20:42 GMT
 >Server: Apache-Coyote/1.1
 >
 >20d
 ><?xml version="1.0" encoding="UTF-8"?>
 ><soapenv:Envelope 
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
 > xmlns:xsd="http://www.w3.org/2001/XMLSchema"
 > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 > <soapenv:Body>
 > <ns1:capitalizeResponse
 > soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
 > xmlns:ns1="http://192.168.0.103:8888/file_manager/services/EchoCaps">
 > <EchoCaps xsi:type="xsd:string">INPUT FROM C++ CLIENT</EchoCaps>
 > </ns1:capitalizeResponse>
 > </soapenv:Body>
 ></soapenv:Envelope>
 >0
 >
 >
 >==============
 >
 >
 >
 >
 >
 >
 >
 >
 >
 >
 >
 >
 >
 >
 >
 >
 >
 >
 >
 >
 >
 >
 >
 >
 >
 >
 >On Friday 28 May 2004 12:26 pm, Ben Souther wrote:
 >
 >
 >>Hello,
 >>
 >>I've used the WSDL2Ws tool that ships with Axis C++ to create a simple
 >>client for a java webservice running on axis/tomcat. The webservice 
method
 >>takes a string as it's only argument and returns the same string but in
 >>upper case.
 >>
 >>The c++ method that gets generated has an extra input parameter, has a
 >>return type of void, and doesn't seem to work.
 >>
 >>I tried commenting out the line with the second "m_pCall->AddParameter.."
 >>statement.
 >>This improved things a bit. I can now see that a call is being made.
 >>I determined this with a System.out.println statement on the server which
 >>shows that the string is being passed from the c++ client to the
 >>webservice.
 >>
 >>After that, the app just hangs for about 10 seconds and returns with the
 >>following message:
 >>
 >>execution break
 >>m_MsgSize == 0, so return NULL
 >>Press any key to continue
 >>
 >>Is Axis C++ interoperable with Axis Java?.
 >>Do I need to tweak the WSDL to get this to work?
 >>
 >>If the WSDL2Ws tool isn't generating the proper c++ code, does anyone 
know
 >>where there is an example of a working c++ client that calls an 
echoString
 >>type of webservice that I can use as a template?
 >>
 >>Any help would be greatly appreciated.
 >>
 >>Below is a copy of all relevant files:
 >>
 >>====================================================
 >>The Java WS Class:
 >>====================================================
 >>package filemanager.service;
 >>public class EchoCaps{
 >>
 >> public String capitalize(String in){
 >> System.out.println("Value passed in from client: " + in);
 >> return in.toUpperCase();
 >> }
 >>}
 >>
 >>===========================================================
 >>The WSDL generated from that class, from Axis Java running on Tomcat:
 >>===========================================================
 >> <wsdl:definitions
 >>targetNamespace="http://localhost:8080/file_manager/services/EchoCaps">
 >>
 >> <wsdl:message name="capitalizeRequest">
 >><wsdl:part name="inputString" type="xsd:string"/>
 >></wsdl:message>
 >>
 >> <wsdl:message name="capitalizeResponse">
 >><wsdl:part name="EchoCaps" type="xsd:string"/>
 >></wsdl:message>
 >>
 >> <wsdl:portType name="EchoCaps">
 >>
 >> <wsdl:operation name="capitalize" parameterOrder="inputString">
 >><wsdl:input message="impl:capitalizeRequest" name="capitalizeRequest"/>
 >><wsdl:output message="impl:capitalizeResponse" 
name="capitalizeResponse"/>
 >></wsdl:operation>
 >></wsdl:portType>
 >>
 >> <wsdl:binding name="EchoCapsSoapBinding" type="impl:EchoCaps">
 >><wsdlsoap:binding style="rpc"
 >>transport="http://schemas.xmlsoap.org/soap/http"/>
 >>
 >> <wsdl:operation name="capitalize">
 >><wsdlsoap:operation soapAction=""/>
 >>
 >> <wsdl:input name="capitalizeRequest">
 >><wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
 >>namespace="http://localhost:8080/file_manager/services/EchoCaps"
 >>use="encoded"/>
 >></wsdl:input>
 >>
 >> <wsdl:output name="capitalizeResponse">
 >><wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
 >>namespace="http://localhost:8080/file_manager/services/EchoCaps"
 >>use="encoded"/>
 >></wsdl:output>
 >></wsdl:operation>
 >></wsdl:binding>
 >>
 >> <wsdl:service name="EchoCapsService">
 >>
 >> <wsdl:port binding="impl:EchoCapsSoapBinding" name="EchoCaps">
 >><wsdlsoap:address
 >>location="http://localhost:8080/file_manager/services/EchoCaps"/>
 >></wsdl:port>
 >></wsdl:service>
 >></wsdl:definitions>
 >>
 >>==========================================================
 >>The generated cpp file from running WSDL2Ws on the WSDL file above:
 >>==========================================================
 >>/*
 >> * This is the Client Stub implementation file genarated by WSDL2Ws tool.
 >> * EchoCaps.cpp: implemtation for the EchoCaps.
 >> *
 >> */
 >>
 >>#include "EchoCaps.h"
 >>
 >>#include <axis/server/AxisWrapperAPI.h>
 >>
 >>bool CallBase::bInitialized;
 >>CallFunctions CallBase::ms_VFtable;
 >>EchoCaps::EchoCaps()
 >>{
 >> m_pCall = new Call();
 >> m_pCall->SetProtocol(APTHTTP);
 >>
 >>m_pCall->SetEndpointURI("http://192.168.0.103:8080/file_manager/services/Ec
 >>hoCaps"); }
 >>
 >>EchoCaps::~EchoCaps()
 >>{
 >> delete m_pCall;
 >>}
 >>
 >>
 >>/*Methods corresponding to the web service methods*/
 >>
 >>/*
 >> * This method wrap the service methodcapitalize
 >> */
 >>void EchoCaps::capitalize(xsd__string Value0, xsd__string Value1)
 >>{
 >> if (AXIS_SUCCESS != m_pCall->Initialize(CPP_RPC_PROVIDER, 
NORMAL_CHANNEL))
 >>return ;
 >> m_pCall->SetTransportProperty(SOAPACTION_HEADER , "");
 >> m_pCall->SetSOAPVersion(SOAP_VER_1_1);
 >> m_pCall->SetOperation("capitalize",
 >>"http://192.168.0.103:8080/file_manager/services/EchoCaps");
 >> m_pCall->AddParameter((void*)&Value0, "inputString", XSD_STRING);
 >>
 >>
 >>//******************************************************************* //
 >>After commenting out the following line, the client was able to //
 >>successfully send the string to the webservice.
 >> //m_pCall->AddParameter((void*)&Value1, "EchoCaps", XSD_STRING);
 >>
 >>//*******************************************************************
 >>
 >> if (AXIS_SUCCESS == m_pCall->Invoke())
 >> {
 >> if(AXIS_SUCCESS == m_pCall->CheckMessage("capitalizeResponse",
 >>"http://192.168.0.103:8080/file_manager/services/EchoCaps"))
 >> {
 >> /*not successful*/
 >> }
 >>
 >>
 >> }
 >> m_pCall->UnInitialize();
 >>}
 >>
 >>//
 >>// Added by me
 >>//
 >>void main(){
 >> EchoCaps echoCaps;
 >> echoCaps.capitalize("this is a string", "");
 >>}
 >>
 >>
 >
 >
 >
 >
 >


-- 
The best way to predict the future is to invent it - Alan Kay


-- 
The best way to predict the future is to invent it - Alan Kay


Re: c++ WSDL2Ws creates an extra input parameter

Posted by Ben Souther <bs...@fwdco.com>.
I wasn't aware that there is a separate list for axis-c.
Thank you for forwarding these.



On Tuesday 01 June 2004 11:47 am, Aleksander Slominski wrote:
> Ben Souther wrote:
> >Thank you, Aleksander.
> >
> >Is there any known work around for this, preferably on the client (c++)
> > side?
>
> until it is resolved i would just do global search in source code and
> replace string HTTP/1.1 with 1.0 :)
>
> also you should post this question to axis-c-user and axis-c-dev mailing
> lists (i have CCed them now).
>
> alek
>
>
>
>
> -------- Original Message --------
>
> Subject: 	Re: c++ WSDL2Ws creates an extra input parameter
> Date: 	Fri, 28 May 2004 18:11:56 -0500
> From: 	Aleksander Slominski <as...@cs.indiana.edu>
> To: 	axis-user@ws.apache.org
> References: 	<20...@fwdco.com>
> <20...@fwdco.com>
>
> Ben Souther wrote:
>  >More Data......
>  >
>  >Using the tcpmon application, I was able to grab all of the data being
>
> swapped
>
>  >between the client and server.
>  >
>  >For some reason, Axis (server, java) returns the returns the response
>  >"chunked" for the C++ Client but not for the Java client.
>
> the reason is that AXIS C++ client sends HTTP 1.1 request and support in
> clinet for chunked is then assumed by server (tomcat)::
> POST /file_manager/services/EchoCaps HTTP/1.1
>
> alek
>
>  >I assume the delay is due to the connection not closing correctly.
>  >The C++ app probaly returns after the connection times out???
>  >
>  >Again, any help is appreciated
>  >-Ben
>  >
>  >Here is the data intercepted with tcpmon:....
>  >=================================
>  >FROM THE JAVA CLIENT
>  >=================================
>  >Listen Port: 8888
>  >Target Host: 127.0.0.1
>  >Target Port: 8080
>  >==== Request ====
>  >POST /file_manager/services/EchoCaps HTTP/1.0
>  >Content-Type: text/xml; charset=utf-8
>  >Accept: application/soap+xml, application/dime, multipart/related, text/*
>  >User-Agent: Axis/1.1RC2
>  >Host: 127.0.0.1
>  >Cache-Control: no-cache
>  >Pragma: no-cache
>  >SOAPAction: ""
>  >Content-Length: 473
>  >
>  ><?xml version="1.0" encoding="UTF-8"?>
>  ><soapenv:Envelope
>
> xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
>
>  > xmlns:xsd="http://www.w3.org/2001/XMLSchema"
>  > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
>  > <soapenv:Body>
>  > <ns1:capitalize
>  >soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
>  >xmlns:ns1="EchoCaps">
>  > <inputString xsi:type="xsd:string">String from the java
>  >client</inputString>
>  > </ns1:capitalize>
>  > </soapenv:Body>
>  ></soapenv:Envelope>
>  >
>  >
>  >==== Response ====
>  >HTTP/1.1 200 OK
>  >Content-Type: text/xml;charset=utf-8
>  >Date: Fri, 28 May 2004 20:17:24 GMT
>  >Server: Apache-Coyote/1.1
>  >Connection: close
>  >
>  ><?xml version="1.0" encoding="UTF-8"?>
>  ><soapenv:Envelope
>
> xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
>
>  > xmlns:xsd="http://www.w3.org/2001/XMLSchema"
>  > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
>  > <soapenv:Body>
>  > <ns1:capitalizeResponse
>  > soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
>  > xmlns:ns1="EchoCaps">
>  > <EchoCaps xsi:type="xsd:string">STRING FROM THE JAVA CLIENT</EchoCaps>
>  > </ns1:capitalizeResponse>
>  > </soapenv:Body>
>  ></soapenv:Envelope>
>  >
>  >
>  >
>  >
>  >===================
>  >FROM THE C++ CLIENT..........
>  >===================
>  >Listen Port: 8888
>  >Target Host: 127.0.0.1
>  >Target Port: 8080
>  >==== Request ====
>  >POST /file_manager/services/EchoCaps HTTP/1.1
>  >Host: 127.0.0.1
>  >Content-Type: text/xml; charset=UTF-8
>  >SOAPAction: "EchoCaps#capitalize"
>  >Content-Length: 439
>  >
>  ><?xml version='1.0' encoding='utf-8' ?>
>  ><SOAP-ENV:Envelope
>
> xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
>
>  > xmlns:xsd="http://www.w3.org/2001/XMLSchema"
>  > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
>  > <SOAP-ENV:Body>
>  > <ns1:capitalize
>  >xmlns:ns1="http://192.168.0.103:8888/file_manager/services/EchoCaps">
>  > <inputString xsi:type="xsd:string">Input from C++
>  >Client</inputString>
>  > </ns1:capitalize>
>  > </SOAP-ENV:Body>
>  ></SOAP-ENV:Envelope>
>  >
>  >
>  >==== Response ====
>  >HTTP/1.1 200 OK
>  >Content-Type: text/xml;charset=utf-8
>  >Transfer-Encoding: chunked
>  >Date: Fri, 28 May 2004 20:20:42 GMT
>  >Server: Apache-Coyote/1.1
>  >
>  >20d
>  ><?xml version="1.0" encoding="UTF-8"?>
>  ><soapenv:Envelope
>
> xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
>
>  > xmlns:xsd="http://www.w3.org/2001/XMLSchema"
>  > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
>  > <soapenv:Body>
>  > <ns1:capitalizeResponse
>  > soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
>  > xmlns:ns1="http://192.168.0.103:8888/file_manager/services/EchoCaps">
>  > <EchoCaps xsi:type="xsd:string">INPUT FROM C++ CLIENT</EchoCaps>
>  > </ns1:capitalizeResponse>
>  > </soapenv:Body>
>  ></soapenv:Envelope>
>  >0
>  >
>  >
>  >==============
>  >
>  >On Friday 28 May 2004 12:26 pm, Ben Souther wrote:
>  >>Hello,
>  >>
>  >>I've used the WSDL2Ws tool that ships with Axis C++ to create a simple
>  >>client for a java webservice running on axis/tomcat. The webservice
>
> method
>
>  >>takes a string as it's only argument and returns the same string but in
>  >>upper case.
>  >>
>  >>The c++ method that gets generated has an extra input parameter, has a
>  >>return type of void, and doesn't seem to work.
>  >>
>  >>I tried commenting out the line with the second
>  >> "m_pCall->AddParameter.." statement.
>  >>This improved things a bit. I can now see that a call is being made.
>  >>I determined this with a System.out.println statement on the server
>  >> which shows that the string is being passed from the c++ client to the
>  >> webservice.
>  >>
>  >>After that, the app just hangs for about 10 seconds and returns with the
>  >>following message:
>  >>
>  >>execution break
>  >>m_MsgSize == 0, so return NULL
>  >>Press any key to continue
>  >>
>  >>Is Axis C++ interoperable with Axis Java?.
>  >>Do I need to tweak the WSDL to get this to work?
>  >>
>  >>If the WSDL2Ws tool isn't generating the proper c++ code, does anyone
>
> know
>
>  >>where there is an example of a working c++ client that calls an
>
> echoString
>
>  >>type of webservice that I can use as a template?
>  >>
>  >>Any help would be greatly appreciated.
>  >>
>  >>Below is a copy of all relevant files:
>  >>
>  >>====================================================
>  >>The Java WS Class:
>  >>====================================================
>  >>package filemanager.service;
>  >>public class EchoCaps{
>  >>
>  >> public String capitalize(String in){
>  >> System.out.println("Value passed in from client: " + in);
>  >> return in.toUpperCase();
>  >> }
>  >>}
>  >>
>  >>===========================================================
>  >>The WSDL generated from that class, from Axis Java running on Tomcat:
>  >>===========================================================
>  >> <wsdl:definitions
>  >>targetNamespace="http://localhost:8080/file_manager/services/EchoCaps">
>  >>
>  >> <wsdl:message name="capitalizeRequest">
>  >><wsdl:part name="inputString" type="xsd:string"/>
>  >></wsdl:message>
>  >>
>  >> <wsdl:message name="capitalizeResponse">
>  >><wsdl:part name="EchoCaps" type="xsd:string"/>
>  >></wsdl:message>
>  >>
>  >> <wsdl:portType name="EchoCaps">
>  >>
>  >> <wsdl:operation name="capitalize" parameterOrder="inputString">
>  >><wsdl:input message="impl:capitalizeRequest" name="capitalizeRequest"/>
>  >><wsdl:output message="impl:capitalizeResponse"
>
> name="capitalizeResponse"/>
>
>  >></wsdl:operation>
>  >></wsdl:portType>
>  >>
>  >> <wsdl:binding name="EchoCapsSoapBinding" type="impl:EchoCaps">
>  >><wsdlsoap:binding style="rpc"
>  >>transport="http://schemas.xmlsoap.org/soap/http"/>
>  >>
>  >> <wsdl:operation name="capitalize">
>  >><wsdlsoap:operation soapAction=""/>
>  >>
>  >> <wsdl:input name="capitalizeRequest">
>  >><wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
>  >>namespace="http://localhost:8080/file_manager/services/EchoCaps"
>  >>use="encoded"/>
>  >></wsdl:input>
>  >>
>  >> <wsdl:output name="capitalizeResponse">
>  >><wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
>  >>namespace="http://localhost:8080/file_manager/services/EchoCaps"
>  >>use="encoded"/>
>  >></wsdl:output>
>  >></wsdl:operation>
>  >></wsdl:binding>
>  >>
>  >> <wsdl:service name="EchoCapsService">
>  >>
>  >> <wsdl:port binding="impl:EchoCapsSoapBinding" name="EchoCaps">
>  >><wsdlsoap:address
>  >>location="http://localhost:8080/file_manager/services/EchoCaps"/>
>  >></wsdl:port>
>  >></wsdl:service>
>  >></wsdl:definitions>
>  >>
>  >>==========================================================
>  >>The generated cpp file from running WSDL2Ws on the WSDL file above:
>  >>==========================================================
>  >>/*
>  >> * This is the Client Stub implementation file genarated by WSDL2Ws
>  >> tool. * EchoCaps.cpp: implemtation for the EchoCaps.
>  >> *
>  >> */
>  >>
>  >>#include "EchoCaps.h"
>  >>
>  >>#include <axis/server/AxisWrapperAPI.h>
>  >>
>  >>bool CallBase::bInitialized;
>  >>CallFunctions CallBase::ms_VFtable;
>  >>EchoCaps::EchoCaps()
>  >>{
>  >> m_pCall = new Call();
>  >> m_pCall->SetProtocol(APTHTTP);
>  >>
>  >>m_pCall->SetEndpointURI("http://192.168.0.103:8080/file_manager/services
>  >>/Ec hoCaps"); }
>  >>
>  >>EchoCaps::~EchoCaps()
>  >>{
>  >> delete m_pCall;
>  >>}
>  >>
>  >>
>  >>/*Methods corresponding to the web service methods*/
>  >>
>  >>/*
>  >> * This method wrap the service methodcapitalize
>  >> */
>  >>void EchoCaps::capitalize(xsd__string Value0, xsd__string Value1)
>  >>{
>  >> if (AXIS_SUCCESS != m_pCall->Initialize(CPP_RPC_PROVIDER,
>
> NORMAL_CHANNEL))
>
>  >>return ;
>  >> m_pCall->SetTransportProperty(SOAPACTION_HEADER , "");
>  >> m_pCall->SetSOAPVersion(SOAP_VER_1_1);
>  >> m_pCall->SetOperation("capitalize",
>  >>"http://192.168.0.103:8080/file_manager/services/EchoCaps");
>  >> m_pCall->AddParameter((void*)&Value0, "inputString", XSD_STRING);
>  >>
>  >>
>  >>//******************************************************************* //
>  >>After commenting out the following line, the client was able to //
>  >>successfully send the string to the webservice.
>  >> //m_pCall->AddParameter((void*)&Value1, "EchoCaps", XSD_STRING);
>  >>
>  >>//*******************************************************************
>  >>
>  >> if (AXIS_SUCCESS == m_pCall->Invoke())
>  >> {
>  >> if(AXIS_SUCCESS == m_pCall->CheckMessage("capitalizeResponse",
>  >>"http://192.168.0.103:8080/file_manager/services/EchoCaps"))
>  >> {
>  >> /*not successful*/
>  >> }
>  >>
>  >>
>  >> }
>  >> m_pCall->UnInitialize();
>  >>}
>  >>
>  >>//
>  >>// Added by me
>  >>//
>  >>void main(){
>  >> EchoCaps echoCaps;
>  >> echoCaps.capitalize("this is a string", "");
>  >>}

-- 
Ben Souther
F.W. Davison & Company, Inc.


This e-mail message, and any accompanying documents, is for the sole use of
the intended recipient(s) and may contain confidential and privileged
information.  Any unauthorized review, use, disclosure, distribution or
copying is prohibited.  If you are not the intended recipient, please
contact our office by email or by telephone at (508) 747-7261 and
immediately destroy all copies of the original message.

Re: c++ WSDL2Ws creates an extra input parameter

Posted by Samisa Abeysinghe <sa...@yahoo.com>.
Yes, I did apply your patch to main cvs head. 
My tests were successful with the patch.

Samisa...

--- John Hawkins <HA...@uk.ibm.com> wrote:
> 
> 
> 
> 
> Chunking support should be in Axis client. I think Samisa was looking into
> ensuring it went in?
> 
> John Hawkins
> 
> 
> 
> 
>                                                                            
>              Aleksander                                                    
>              Slominski                                                     
>              <aslom@cs.indiana                                          To 
>              .edu>                     axis-user@ws.apache.org             
>                                                                         cc 
>              01/06/2004 16:47          Apache AXIS C Developers List       
>                                        <ax...@ws.apache.org>, Apache  
>                                        AXIS C User List                    
>              Please respond to         <ax...@ws.apache.org>         
>               "Apache AXIS C                                       Subject 
>              Developers List"          Re: c++   WSDL2Ws creates an extra  
>                                        input parameter                     
>                                                                            
>                                                                            
>                                                                            
>                                                                            
>                                                                            
>                                                                            
> 
> 
> 
> 
> Ben Souther wrote:
> 
> >Thank you, Aleksander.
> >
> >Is there any known work around for this, preferably on the client (c++)
> side?
> >
> >
> >
> until it is resolved i would just do global search in source code and
> replace string HTTP/1.1 with 1.0 :)
> 
> also you should post this question to axis-c-user and axis-c-dev mailing
> lists (i have CCed them now).
> 
> alek
> 
> 
> 
> 
> -------- Original Message --------
> 
> Subject:           Re: c++ WSDL2Ws creates an extra input parameter
> Date:              Fri, 28 May 2004 18:11:56 -0500
> From:              Aleksander Slominski <as...@cs.indiana.edu>
> To:          axis-user@ws.apache.org
> References:              <20...@fwdco.com>
> <20...@fwdco.com>
> 
> 
> 
> Ben Souther wrote:
> 
>  >More Data......
>  >
>  >Using the tcpmon application, I was able to grab all of the data being
> swapped
>  >between the client and server.
>  >
>  >For some reason, Axis (server, java) returns the returns the response
>  >"chunked" for the C++ Client but not for the Java client.
>  >
>  >
> the reason is that AXIS C++ client sends HTTP 1.1 request and support in
> clinet for chunked is then assumed by server (tomcat)::
> POST /file_manager/services/EchoCaps HTTP/1.1
> 
> alek
> 
> 
>  >I assume the delay is due to the connection not closing correctly.
>  >The C++ app probaly returns after the connection times out???
>  >
>  >Again, any help is appreciated
>  >-Ben
>  >
>  >Here is the data intercepted with tcpmon:....
>  >=================================
>  >FROM THE JAVA CLIENT
>  >=================================
>  >Listen Port: 8888
>  >Target Host: 127.0.0.1
>  >Target Port: 8080
>  >==== Request ====
>  >POST /file_manager/services/EchoCaps HTTP/1.0
>  >Content-Type: text/xml; charset=utf-8
>  >Accept: application/soap+xml, application/dime, multipart/related, text/*
>  >User-Agent: Axis/1.1RC2
>  >Host: 127.0.0.1
>  >Cache-Control: no-cache
>  >Pragma: no-cache
>  >SOAPAction: ""
>  >Content-Length: 473
>  >
>  ><?xml version="1.0" encoding="UTF-8"?>
>  ><soapenv:Envelope
> xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
>  > xmlns:xsd="http://www.w3.org/2001/XMLSchema"
>  > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
>  > <soapenv:Body>
>  > <ns1:capitalize
>  >soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
>  >xmlns:ns1="EchoCaps">
>  > <inputString xsi:type="xsd:string">String from the java
>  >client</inputString>
>  > </ns1:capitalize>
>  > </soapenv:Body>
>  ></soapenv:Envelope>
>  >
>  >
>  >==== Response ====
>  >HTTP/1.1 200 OK
>  >Content-Type: text/xml;charset=utf-8
>  >Date: Fri, 28 May 2004 20:17:24 GMT
>  >Server: Apache-Coyote/1.1
>  >Connection: close
>  >
>  ><?xml version="1.0" encoding="UTF-8"?>
>  ><soapenv:Envelope
> xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
>  > xmlns:xsd="http://www.w3.org/2001/XMLSchema"
>  > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
>  > <soapenv:Body>
>  > <ns1:capitalizeResponse
>  > soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
>  > xmlns:ns1="EchoCaps">
>  > <EchoCaps xsi:type="xsd:string">STRING FROM THE JAVA CLIENT</EchoCaps>
>  > </ns1:capitalizeResponse>
>  > </soapenv:Body>
>  ></soapenv:Envelope>
>  >
>  >
>  >
>  >
>  >===================
>  >FROM THE C++ CLIENT..........
>  >===================
>  >Listen Port: 8888
>  >Target Host: 127.0.0.1
>  >Target Port: 8080
>  >==== Request ====
>  >POST /file_manager/services/EchoCaps HTTP/1.1
>  >Host: 127.0.0.1
>  >Content-Type: text/xml; charset=UTF-8
>  >SOAPAction: "EchoCaps#capitalize"
>  >Content-Length: 439
>  >
>  ><?xml version='1.0' encoding='utf-8' ?>
>  ><SOAP-ENV:Envelope
> xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
>  > xmlns:xsd="http://www.w3.org/2001/XMLSchema"
>  > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
>  > <SOAP-ENV:Body>
>  > <ns1:capitalize
>  >xmlns:ns1="http://192.168.0.103:8888/file_manager/services/EchoCaps">
>  > <inputString xsi:type="xsd:string">Input from C++
>  >Client</inputString>
>  > </ns1:capitalize>
>  > </SOAP-ENV:Body>
>  ></SOAP-ENV:Envelope>
>  >
>  >
>  >==== Response ====
>  >HTTP/1.1 200 OK
>  >Content-Type: text/xml;charset=utf-8
>  >Transfer-Encoding: chunked
>  >Date: Fri, 28 May 2004 20:20:42 GMT
>  >Server: Apache-Coyote/1.1
>  >
>  >20d
>  ><?xml version="1.0" encoding="UTF-8"?>
>  ><soapenv:Envelope
> xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
>  > xmlns:xsd="http://www.w3.org/2001/XMLSchema"
>  > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
>  > <soapenv:Body>
>  > <ns1:capitalizeResponse
>  > soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
>  > xmlns:ns1="http://192.168.0.103:8888/file_manager/services/EchoCaps">
>  > <EchoCaps xsi:type="xsd:string">INPUT FROM C++ CLIENT</EchoCaps>
>  > </ns1:capitalizeResponse>
>  > </soapenv:Body>
>  ></soapenv:Envelope>
>  >0
>  >
>  >
> 
=== message truncated ===



	
		
__________________________________
Do you Yahoo!?
Friends.  Fun.  Try the all-new Yahoo! Messenger.
http://messenger.yahoo.com/ 

Re: c++ WSDL2Ws creates an extra input parameter

Posted by John Hawkins <HA...@uk.ibm.com>.



Chunking support should be in Axis client. I think Samisa was looking into
ensuring it went in?

John Hawkins




                                                                           
             Aleksander                                                    
             Slominski                                                     
             <aslom@cs.indiana                                          To 
             .edu>                     axis-user@ws.apache.org             
                                                                        cc 
             01/06/2004 16:47          Apache AXIS C Developers List       
                                       <ax...@ws.apache.org>, Apache  
                                       AXIS C User List                    
             Please respond to         <ax...@ws.apache.org>         
              "Apache AXIS C                                       Subject 
             Developers List"          Re: c++   WSDL2Ws creates an extra  
                                       input parameter                     
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           




Ben Souther wrote:

>Thank you, Aleksander.
>
>Is there any known work around for this, preferably on the client (c++)
side?
>
>
>
until it is resolved i would just do global search in source code and
replace string HTTP/1.1 with 1.0 :)

also you should post this question to axis-c-user and axis-c-dev mailing
lists (i have CCed them now).

alek




-------- Original Message --------

Subject:           Re: c++ WSDL2Ws creates an extra input parameter
Date:              Fri, 28 May 2004 18:11:56 -0500
From:              Aleksander Slominski <as...@cs.indiana.edu>
To:          axis-user@ws.apache.org
References:              <20...@fwdco.com>
<20...@fwdco.com>



Ben Souther wrote:

 >More Data......
 >
 >Using the tcpmon application, I was able to grab all of the data being
swapped
 >between the client and server.
 >
 >For some reason, Axis (server, java) returns the returns the response
 >"chunked" for the C++ Client but not for the Java client.
 >
 >
the reason is that AXIS C++ client sends HTTP 1.1 request and support in
clinet for chunked is then assumed by server (tomcat)::
POST /file_manager/services/EchoCaps HTTP/1.1

alek


 >I assume the delay is due to the connection not closing correctly.
 >The C++ app probaly returns after the connection times out???
 >
 >Again, any help is appreciated
 >-Ben
 >
 >Here is the data intercepted with tcpmon:....
 >=================================
 >FROM THE JAVA CLIENT
 >=================================
 >Listen Port: 8888
 >Target Host: 127.0.0.1
 >Target Port: 8080
 >==== Request ====
 >POST /file_manager/services/EchoCaps HTTP/1.0
 >Content-Type: text/xml; charset=utf-8
 >Accept: application/soap+xml, application/dime, multipart/related, text/*
 >User-Agent: Axis/1.1RC2
 >Host: 127.0.0.1
 >Cache-Control: no-cache
 >Pragma: no-cache
 >SOAPAction: ""
 >Content-Length: 473
 >
 ><?xml version="1.0" encoding="UTF-8"?>
 ><soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
 > xmlns:xsd="http://www.w3.org/2001/XMLSchema"
 > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 > <soapenv:Body>
 > <ns1:capitalize
 >soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
 >xmlns:ns1="EchoCaps">
 > <inputString xsi:type="xsd:string">String from the java
 >client</inputString>
 > </ns1:capitalize>
 > </soapenv:Body>
 ></soapenv:Envelope>
 >
 >
 >==== Response ====
 >HTTP/1.1 200 OK
 >Content-Type: text/xml;charset=utf-8
 >Date: Fri, 28 May 2004 20:17:24 GMT
 >Server: Apache-Coyote/1.1
 >Connection: close
 >
 ><?xml version="1.0" encoding="UTF-8"?>
 ><soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
 > xmlns:xsd="http://www.w3.org/2001/XMLSchema"
 > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 > <soapenv:Body>
 > <ns1:capitalizeResponse
 > soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
 > xmlns:ns1="EchoCaps">
 > <EchoCaps xsi:type="xsd:string">STRING FROM THE JAVA CLIENT</EchoCaps>
 > </ns1:capitalizeResponse>
 > </soapenv:Body>
 ></soapenv:Envelope>
 >
 >
 >
 >
 >===================
 >FROM THE C++ CLIENT..........
 >===================
 >Listen Port: 8888
 >Target Host: 127.0.0.1
 >Target Port: 8080
 >==== Request ====
 >POST /file_manager/services/EchoCaps HTTP/1.1
 >Host: 127.0.0.1
 >Content-Type: text/xml; charset=UTF-8
 >SOAPAction: "EchoCaps#capitalize"
 >Content-Length: 439
 >
 ><?xml version='1.0' encoding='utf-8' ?>
 ><SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
 > xmlns:xsd="http://www.w3.org/2001/XMLSchema"
 > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 > <SOAP-ENV:Body>
 > <ns1:capitalize
 >xmlns:ns1="http://192.168.0.103:8888/file_manager/services/EchoCaps">
 > <inputString xsi:type="xsd:string">Input from C++
 >Client</inputString>
 > </ns1:capitalize>
 > </SOAP-ENV:Body>
 ></SOAP-ENV:Envelope>
 >
 >
 >==== Response ====
 >HTTP/1.1 200 OK
 >Content-Type: text/xml;charset=utf-8
 >Transfer-Encoding: chunked
 >Date: Fri, 28 May 2004 20:20:42 GMT
 >Server: Apache-Coyote/1.1
 >
 >20d
 ><?xml version="1.0" encoding="UTF-8"?>
 ><soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
 > xmlns:xsd="http://www.w3.org/2001/XMLSchema"
 > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 > <soapenv:Body>
 > <ns1:capitalizeResponse
 > soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
 > xmlns:ns1="http://192.168.0.103:8888/file_manager/services/EchoCaps">
 > <EchoCaps xsi:type="xsd:string">INPUT FROM C++ CLIENT</EchoCaps>
 > </ns1:capitalizeResponse>
 > </soapenv:Body>
 ></soapenv:Envelope>
 >0
 >
 >
 >==============
 >
 >
 >
 >
 >
 >
 >
 >
 >
 >
 >
 >
 >
 >
 >
 >
 >
 >
 >
 >
 >
 >
 >
 >
 >
 >
 >On Friday 28 May 2004 12:26 pm, Ben Souther wrote:
 >
 >
 >>Hello,
 >>
 >>I've used the WSDL2Ws tool that ships with Axis C++ to create a simple
 >>client for a java webservice running on axis/tomcat. The webservice
method
 >>takes a string as it's only argument and returns the same string but in
 >>upper case.
 >>
 >>The c++ method that gets generated has an extra input parameter, has a
 >>return type of void, and doesn't seem to work.
 >>
 >>I tried commenting out the line with the second
"m_pCall->AddParameter.."
 >>statement.
 >>This improved things a bit. I can now see that a call is being made.
 >>I determined this with a System.out.println statement on the server
which
 >>shows that the string is being passed from the c++ client to the
 >>webservice.
 >>
 >>After that, the app just hangs for about 10 seconds and returns with the
 >>following message:
 >>
 >>execution break
 >>m_MsgSize == 0, so return NULL
 >>Press any key to continue
 >>
 >>Is Axis C++ interoperable with Axis Java?.
 >>Do I need to tweak the WSDL to get this to work?
 >>
 >>If the WSDL2Ws tool isn't generating the proper c++ code, does anyone
know
 >>where there is an example of a working c++ client that calls an
echoString
 >>type of webservice that I can use as a template?
 >>
 >>Any help would be greatly appreciated.
 >>
 >>Below is a copy of all relevant files:
 >>
 >>====================================================
 >>The Java WS Class:
 >>====================================================
 >>package filemanager.service;
 >>public class EchoCaps{
 >>
 >> public String capitalize(String in){
 >> System.out.println("Value passed in from client: " + in);
 >> return in.toUpperCase();
 >> }
 >>}
 >>
 >>===========================================================
 >>The WSDL generated from that class, from Axis Java running on Tomcat:
 >>===========================================================
 >> <wsdl:definitions
 >>targetNamespace="http://localhost:8080/file_manager/services/EchoCaps">
 >>
 >> <wsdl:message name="capitalizeRequest">
 >><wsdl:part name="inputString" type="xsd:string"/>
 >></wsdl:message>
 >>
 >> <wsdl:message name="capitalizeResponse">
 >><wsdl:part name="EchoCaps" type="xsd:string"/>
 >></wsdl:message>
 >>
 >> <wsdl:portType name="EchoCaps">
 >>
 >> <wsdl:operation name="capitalize" parameterOrder="inputString">
 >><wsdl:input message="impl:capitalizeRequest" name="capitalizeRequest"/>
 >><wsdl:output message="impl:capitalizeResponse"
name="capitalizeResponse"/>
 >></wsdl:operation>
 >></wsdl:portType>
 >>
 >> <wsdl:binding name="EchoCapsSoapBinding" type="impl:EchoCaps">
 >><wsdlsoap:binding style="rpc"
 >>transport="http://schemas.xmlsoap.org/soap/http"/>
 >>
 >> <wsdl:operation name="capitalize">
 >><wsdlsoap:operation soapAction=""/>
 >>
 >> <wsdl:input name="capitalizeRequest">
 >><wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
 >>namespace="http://localhost:8080/file_manager/services/EchoCaps"
 >>use="encoded"/>
 >></wsdl:input>
 >>
 >> <wsdl:output name="capitalizeResponse">
 >><wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
 >>namespace="http://localhost:8080/file_manager/services/EchoCaps"
 >>use="encoded"/>
 >></wsdl:output>
 >></wsdl:operation>
 >></wsdl:binding>
 >>
 >> <wsdl:service name="EchoCapsService">
 >>
 >> <wsdl:port binding="impl:EchoCapsSoapBinding" name="EchoCaps">
 >><wsdlsoap:address
 >>location="http://localhost:8080/file_manager/services/EchoCaps"/>
 >></wsdl:port>
 >></wsdl:service>
 >></wsdl:definitions>
 >>
 >>==========================================================
 >>The generated cpp file from running WSDL2Ws on the WSDL file above:
 >>==========================================================
 >>/*
 >> * This is the Client Stub implementation file genarated by WSDL2Ws
tool.
 >> * EchoCaps.cpp: implemtation for the EchoCaps.
 >> *
 >> */
 >>
 >>#include "EchoCaps.h"
 >>
 >>#include <axis/server/AxisWrapperAPI.h>
 >>
 >>bool CallBase::bInitialized;
 >>CallFunctions CallBase::ms_VFtable;
 >>EchoCaps::EchoCaps()
 >>{
 >> m_pCall = new Call();
 >> m_pCall->SetProtocol(APTHTTP);
 >>
 >>m_pCall->SetEndpointURI("
http://192.168.0.103:8080/file_manager/services/Ec
 >>hoCaps"); }
 >>
 >>EchoCaps::~EchoCaps()
 >>{
 >> delete m_pCall;
 >>}
 >>
 >>
 >>/*Methods corresponding to the web service methods*/
 >>
 >>/*
 >> * This method wrap the service methodcapitalize
 >> */
 >>void EchoCaps::capitalize(xsd__string Value0, xsd__string Value1)
 >>{
 >> if (AXIS_SUCCESS != m_pCall->Initialize(CPP_RPC_PROVIDER,
NORMAL_CHANNEL))
 >>return ;
 >> m_pCall->SetTransportProperty(SOAPACTION_HEADER , "");
 >> m_pCall->SetSOAPVersion(SOAP_VER_1_1);
 >> m_pCall->SetOperation("capitalize",
 >>"http://192.168.0.103:8080/file_manager/services/EchoCaps");
 >> m_pCall->AddParameter((void*)&Value0, "inputString", XSD_STRING);
 >>
 >>
 >>//******************************************************************* //
 >>After commenting out the following line, the client was able to //
 >>successfully send the string to the webservice.
 >> //m_pCall->AddParameter((void*)&Value1, "EchoCaps", XSD_STRING);
 >>
 >>//*******************************************************************
 >>
 >> if (AXIS_SUCCESS == m_pCall->Invoke())
 >> {
 >> if(AXIS_SUCCESS == m_pCall->CheckMessage("capitalizeResponse",
 >>"http://192.168.0.103:8080/file_manager/services/EchoCaps"))
 >> {
 >> /*not successful*/
 >> }
 >>
 >>
 >> }
 >> m_pCall->UnInitialize();
 >>}
 >>
 >>//
 >>// Added by me
 >>//
 >>void main(){
 >> EchoCaps echoCaps;
 >> echoCaps.capitalize("this is a string", "");
 >>}
 >>
 >>
 >
 >
 >
 >
 >


--
The best way to predict the future is to invent it - Alan Kay


--
The best way to predict the future is to invent it - Alan Kay