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.

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", "");
> }


Reply via email to