Okay...
So After re-building everything, thinking that perhaps there were issues
with regards to the codebase and any stray interactions, I was able to
again run my WSDL2Ws on my wsdl and get my generated code. My lil
client calls a simple "hello world" echo method.
This is what I get on the command line (same as the original post)
[output from my program]
Using service at http://localhost:1596/NaracWS/services/HelloModel
Instantiating remote endpoint stub... [OK]
attempting to send the string [cpp test]
*Before remote call - Result: <no-result>
*After remote call - Result: (null)
Notice that the result I get back is set to "(null)" somewhere!
My web service's logs say that it is behaving just fine, and responding
correctly, corroborated by my java ws client can speak to my service
without a problem.
I have attached the trace from the TCPMON program...
It looks as through the right XML is coming in from the service. (check
the trace and double check me on that).
So, I am thinking the only problem would be deep in the axis code.
However, this all seems silly. This is a simple hello world echo
service passing a string and getting a string. This had to have been
done before from a C++ client to a SERVICE
Adrian Dick wrote:
Hi,
Would it be possible to capture the SOAP request and response? You can
use tcpmonitor, which is part of axis.jar, to do this.
Also, it would be useful if you can provide your WSDL, so we can confirm
the message is as expected, and the stubs are being correctly generated.
Adrian
_______________________________________
Adrian Dick ([EMAIL PROTECTED])
"Gavin M. Bell" <[EMAIL PROTECTED]> wrote on 24/08/2005 17:17:34:
Hello Gentle-people,
I have been going through the exercise of getting axis-c++ to work.
I am using the axis-c-1.5.0-linux-bin distribution. I have created a
Java 'helloworld' echo service.
A simple service, you pass it a string and it returns to you the same
string prepended with an ack string.
I used axis to build the stub and header files for my serice. I then
run my serice.... the java axis service gets the string (as evidenced by
the log output) and then returns. The client returns "(null)".
Why is that? Why does it not return the echo string sent by the service?
I have been reading the list and have set multiRef to false in the axis
service-config.wsdd file:
<globalConfiguration>
<parameter name="adminPassword" value="admin"/>
<parameter name="attachments.implementation"
value="org.apache.axis.attachments.AttachmentsImpl"/>
<parameter name="sendXsiTypes" value="true"/>
<parameter name="sendMultiRefs" value="false"/>
<parameter name="sendXMLDeclaration" value="true"/>
<requestFlow>
<handler type="java:org.apache.axis.handlers.JWSHandler">
<parameter name="scope" value="session"/>
</handler>
<handler type="java:org.apache.axis.handlers.JWSHandler">
<parameter name="scope" value="request"/>
<parameter name="extension" value=".jwr"/>
</handler>
</requestFlow>
</globalConfiguration>
I am using resin-3.0.14 as my service container...
My service side code (java) is:
...
public java.lang.String request( java.lang.String msg ) {
if(msg == null) msg = "<noname>";
System.out.println("some thing: "+msg);
return "This is the hello world! - \""+msg+"\"";
}
...
My client side code (c++) is:
...
int
main (int argc, char *argv[])
{
char endpoint[256];
char original[256];
const char *server = "localhost";
const char *port = "1595";
const char *inputString = "<test-echo-string>";
const char *resultString = "<no-result>";
// Set default service URL
sprintf (endpoint,
"http://localhost:1595/NaracWS/services/HelloModel");
sprintf (original, endpoint);
try{
if (argc < 1)
{
usage (argv[0], endpoint);
return 2;
}
cout << endl << " Using service at " << endpoint << endl << endl;
cout << "Instantiating remote endpoint stub... ";
HelloModel ws(endpoint);
cout << "[OK]" << endl;
cout << "attempting to send the string [cpp test]" <<endl;
printf ("Before remote call - Result: %s\n", resultString);
resultString = ws.request("cpp test");
printf ("After remote call - Result: %s\n", resultString);
}
catch (AxisException & e){printf ("\nException : %s\n", e.what ());}
catch (exception & e){printf ("\nUnknown exception has occured\n");}
catch (...) { printf ("\nUnknown exception has occured\n");}
return 0;
}
C++ client output:
Using service at http://localhost:1595/NaracWS/services/HelloModel
Instantiating remote endpoint stub... Warning - The WSDDFilePath file
(/home/obj/etc/server.wsdd) in the AXISCPP.CONF file does not exist.
[OK]
attempting to send the string [cpp test]
Before remote call - Result: <no-result>
After remote call - Result: (null)
To build it:
g++ *.cpp -I/home/cue/workbench/axis-c-1.5.0-linux-bin/include
-L/home/cue/workbench/axis-c-1.5.0-linux-bin/lib/ -ldl -l axis_client
-ohello_echo
I am at my wit's end. Please, any help would be appreciated.
(I have attached the generated stub and header file)
--
------
Gavin M. Bell
Computer Science Research Scientist
Computing Applications and Research Dept.
Lawrence Livermore National Labs
L-103
[EMAIL PROTECTED]
-------
"I'm trying real hard to be the shepherd."
-Samuel Jackson (Pulp Fiction)
/*
* This file was auto-generated by the Axis C++ Web Service
Generator (WSDL2Ws)
* This file contains Client Stub implementation for remote web service.
*/
#include "HelloModel.hpp"
#include <axis/AxisWrapperAPI.hpp>
#include <string.h>
using namespace std;
HelloModel::HelloModel(const char* pchEndpointUri,
AXIS_PROTOCOL_TYPE eProtocol)
:Stub(pchEndpointUri, eProtocol)
{
}
HelloModel::HelloModel()
:Stub(" ", APTHTTP1_1)
{
m_pCall->setEndpointURI("http://localhost:1595/NaracWS/services/HelloModel
");
}
HelloModel::~HelloModel()
{
}
/*Methods corresponding to the web service methods*/
/*
* This method wrap the service method request
*/
xsd__string HelloModel::request(xsd__string Value0)
{
xsd__string Ret;
memset(&Ret,0,sizeof(xsd__string));
const char* pcCmplxFaultName;
try
{
if (AXIS_SUCCESS != m_pCall->initialize(CPP_RPC_PROVIDER))
return Ret;
if (NULL==m_pCall->getTransportProperty("SOAPAction",false))
{
m_pCall->setTransportProperty(SOAPACTION_HEADER , "");
}
m_pCall->setSOAPVersion(SOAP_VER_1_1);
m_pCall->setOperation("request", "http://localhost:
1595/NaracWS/services/HelloModel");
applyUserPreferences();
m_pCall->addParameter((void*)Value0, "msg", XSD_STRING);
if (AXIS_SUCCESS == m_pCall->invoke())
{
if(AXIS_SUCCESS == m_pCall->checkMessage("requestResponse", "
http://localhost:1595/NaracWS/services/HelloModel"))
{
Ret = m_pCall->getElementAsString("requestReturn", 0);
}
}
m_pCall->unInitialize();
return Ret;
}
catch(AxisException& e)
{
int iExceptionCode = e.getExceptionCode();
if(AXISC_NODE_VALUE_MISMATCH_EXCEPTION != iExceptionCode)
{
throw SoapFaultException(e);
}
ISoapFault* pSoapFault = (ISoapFault*)
m_pCall->checkFault("Fault","http://localhost:
1595/NaracWS/services/HelloModel" );
if(pSoapFault)
{
m_pCall->unInitialize();
throw SoapFaultException(e);
}
else throw;
}
}
/*
* This file was auto-generated by the Axis C++ Web Service
Generator (WSDL2Ws)
* This file contains Client Stub Class for remote web service
*/
#if !defined(__HELLOMODEL_CLIENTSTUB_H__INCLUDED_)
#define __HELLOMODEL_CLIENTSTUB_H__INCLUDED_
#include <axis/client/Stub.hpp>
#include <axis/SoapFaultException.hpp>
#include <axis/ISoapFault.hpp>
AXIS_CPP_NAMESPACE_USE
class HelloModel :public Stub
{
public:
STORAGE_CLASS_INFO HelloModel(const char* pchEndpointUri,
AXIS_PROTOCOL_TYPE eProtocol=APTHTTP1_1);
STORAGE_CLASS_INFO HelloModel();
public:
STORAGE_CLASS_INFO virtual ~HelloModel();
public:
STORAGE_CLASS_INFO xsd__string request(xsd__string Value0);
};
#endif /* !defined(__HELLOMODEL_CLIENTSTUB_H__INCLUDED_)*/
--
------
Gavin M. Bell
Computer Science Research Scientist
Computing Applications and Research Dept.
Lawrence Livermore National Labs
L-103
[EMAIL PROTECTED]
-------
"I'm trying real hard to be the shepherd."
-Samuel Jackson (Pulp Fiction)
==============
Listen Port: 1596
Target Host: localhost
Target Port: 1595
==== Request ====
POST /NaracWS/services/HelloModel HTTP/1.1
Host: localhost:1596
Content-Type: text/xml; charset=UTF-8
SOAPAction: ""
Content-Length: 406
<?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:request
xmlns:ns1="http://localhost:1595/NaracWS/services/HelloModel">
<msg xsi:type="xsd:string">cpp test</msg>
</ns1:request>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
==== Response ====
HTTP/1.1 200 OK
Server: Resin/3.0.14
Content-Type: text/xml; charset=utf-8
Transfer-Encoding: chunked
Date: Wed, 07 Sep 2005 06:22:27 GMT
0253
<?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:requestResponse
soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:ns1="http://localhost:1595/NaracWS/services/HelloModel">
<requestReturn xsi:type="soapenc:string"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">This is the hello
world! - "cpp test"]</requestReturn>
</ns1:requestResponse>
</soapenv:Body>
</soapenv:Envelope>0
==============