Hi Alek & Ben Nice to hear that there are some guys who has nearly the same problem and trying to figure it out. ;-) I did the notice this a couple of days, ago. But I´m not sure about, if this is the right way/answere, because I get sometimes a result back and sometimes a message like msg_size = null with an error message, when I run the appl. (And the wsdl2ws is not working as it has supposed to be. :-[ ) My error looks as follows: "Debug Assertion Failed" File: dbgheap.c Line:1011 Expression: _CrtIsValidHeapPointer(pUserData) Maybe somebody of you can help me out, or post me a simple sample for a c++client/java-service on Tomcat.
Thanks, Cu Phil -----Ursprüngliche Nachricht----- Von: Aleksander Slominski [mailto:[EMAIL PROTECTED] Gesendet: Dienstag, 1. Juni 2004 17:48 An: [EMAIL PROTECTED] Cc: Apache AXIS C Developers List; Apache AXIS C User List Betreff: 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 <[EMAIL PROTECTED]> To: [EMAIL PROTECTED] References: <[EMAIL PROTECTED]> <[EMAIL PROTECTED]> 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/E c >>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