Hi
I generated code with WSDL2C in axis2java2-1.3.
Once the C code is generated, i compiled the code and made a shared library.
After this i copied the shared library adn the service.xml to services
folder in the repository and started the axis2_http_server. When i gave
http://localhost:9090/soap from browser, i am able to see my service
running.
"Deployed Services*parseMessage **Available Operations*
- parseMessage"
But when i send a message from client I am getting segmentation fault. I
copied hello.c sample client code, and changed at appropriate places.
greet_om_ele = axiom_element_create(env, NULL, "parseMessage", NULL,
&greet_om_node);
axiom_element_set_text(greet_om_ele, env, "I am sending a parse Message!",
greet_om_node);
And it gave a segmentation fault. Please let me know whether i am sending it
correctly or not. I am attaching the files generated for input message as
well as the stack trace. Please help.
Thanks
Sathya
[Switching to Thread -1222382672 (LWP 6863)]
0xb7553a97 in axis2_msg_recv_make_new_svc_obj (msg_recv=0x8094ef0,
env=0x809d298, msg_ctx=0x0) at msg_recv.c:157
157 AXIS2_SVC_SKELETON_INIT((axis2_svc_skeleton_t *)impl_class,
env);
(gdb) where
#0 0xb7553a97 in axis2_msg_recv_make_new_svc_obj (msg_recv=0x8094ef0,
env=0x809d298, msg_ctx=0x0) at msg_recv.c:157
#1 0xb7553b2b in axis2_msg_recv_get_impl_obj (msg_recv=0x8094ef0,
env=0x809d298, msg_ctx=0x809dcb8) at msg_recv.c:184
#2 0xb75540a9 in axis2_raw_xml_in_out_msg_recv_invoke_business_logic_sync
(msg_recv=0x8094ef0, env=0x809d298,
msg_ctx=0x809dcb8, new_msg_ctx=0x809f580) at
raw_xml_in_out_msg_recv.c:93
#3 0xb7553f32 in axis2_msg_recv_invoke_business_logic (msg_recv=0x8093f78,
env=0x809d298, in_msg_ctx=0x809dcb8,
out_msg_ctx=0x809f580) at msg_recv.c:372
#4 0xb7553db7 in axis2_msg_recv_receive_impl (msg_recv=0x8094ef0,
env=0x809d298, msg_ctx=0x809dcb8,
callback_recv_param=0x0) at msg_recv.c:304
#5 0xb7553f7e in axis2_msg_recv_receive (msg_recv=0x8093f78, env=0x809d298,
msg_ctx=0x809dcb8, callback_recv_param=0x0)
at msg_recv.c:407
#6 0xb754ca7a in axis2_engine_receive (engine=0x809ed48, env=0x809d298,
msg_ctx=0x809dcb8) at engine.c:288
#7 0xb75dc387 in axis2_http_transport_utils_process_http_post_request
(env=0x809d298, msg_ctx=0x809dcb8,
in_stream=0x809d2c0, out_stream=0x809d2f0, content_type=0x809c010
"application/soap+xml;charset=UTF-8",
content_length=134868296, soap_action_header=0x0,
request_uri=0x809dec8 "http://127.0.0.1:9090/axis2/services/parseMessage")
at http_transport_utils.c:485
#8 0xb75db7f4 in axis2_http_worker_process_request (http_worker=0x809cb00,
env=0x809d298, svr_conn=0x809d2b0,
simple_request=0x809d350) at http_worker.c:299
#9 0xb750df94 in axis2_svr_thread_worker_func (thd=0x809d230,
data=0x809cb20) at http_svr_thread.c:256
#10 0xb759a094 in dummy_worker (opaque=0x8093f78) at thread_unix.c:85
#11 0xb73b4dac in start_thread () from /lib/tls/libpthread.so.0
#12 0xb73419ea in clone () from /lib/tls/libc.so.6
/**
* adb_inputMessage.h
*
* This file was auto-generated from WSDL
* by the Apache Axis2/C version: 1.3 Built on : Aug 10, 2007 (04:45:58 LKT)
*
*/
#include "adb_inputMessage.h"
/**
* implmentation of the inputMessage|http://www.abnamro.com/paymentrouter element
*/
struct adb_inputMessage
{
axutil_qname_t* qname;
axis2_char_t* attrib_inputMessage;
};
/************************* Function Implmentations ********************************/
AXIS2_EXTERN adb_inputMessage_t* AXIS2_CALL
adb_inputMessage_create(
const axutil_env_t *env )
{
adb_inputMessage_t *_inputMessage = NULL;
axutil_qname_t* qname = NULL;
AXIS2_ENV_CHECK(env, NULL);
_inputMessage = (adb_inputMessage_t *) AXIS2_MALLOC(env->
allocator, sizeof(adb_inputMessage_t));
if(NULL == _inputMessage)
{
AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
return NULL;
}
qname = axutil_qname_create (env,
"inputMessage",
"http://www.abnamro.com/paymentrouter",
"ns1");
_inputMessage->qname = qname;
return _inputMessage;
}
axis2_status_t AXIS2_CALL
adb_inputMessage_free (
adb_inputMessage_t* _inputMessage,
const axutil_env_t *env)
{
AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
if(_inputMessage->qname )
{
axutil_qname_free (_inputMessage->qname, env);
_inputMessage->qname = NULL;
}
if(_inputMessage)
{
AXIS2_FREE( env->allocator, _inputMessage);
_inputMessage = NULL;
}
return AXIS2_SUCCESS;
}
axutil_qname_t* AXIS2_CALL
adb_inputMessage_get_qname (
adb_inputMessage_t* _inputMessage,
const axutil_env_t *env)
{
AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
return _inputMessage-> qname;
}
axis2_status_t AXIS2_CALL
adb_inputMessage_deserialize(
adb_inputMessage_t* _inputMessage,
const axutil_env_t *env,
axiom_node_t* parent)
{
axis2_status_t status = AXIS2_SUCCESS;
axiom_namespace_t *ns1 = NULL;
axis2_char_t* text_value = NULL;
axutil_qname_t *qname = NULL;
axutil_qname_t *element_qname = NULL;
axiom_node_t *first_node = NULL;
axiom_node_t *current_node = NULL;
axiom_element_t *current_element = NULL;
AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
ns1 = axiom_namespace_create (env,
"http://www.abnamro.com/paymentrouter",
"ns1");
if ( NULL == parent )
{
/** This should be checked above */
AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "NULL elemenet for inputMessage"
" %d :: %s", env->error->error_number,
AXIS2_ERROR_GET_MESSAGE(env->error));
return AXIS2_FAILURE;
}
current_element = axiom_node_get_data_element( parent, env);
qname = axiom_element_get_qname( current_element, env, parent);
if ( axutil_qname_equals( qname, env, _inputMessage-> qname ) )
{
first_node = axiom_node_get_first_child( parent, env);
}
else
{
first_node = parent;
}
/**
* building inputMessage element
*/
/**
* because elements are not ordered we should surf all the sibling to pick the right one
*/
for ( current_node = first_node; current_node != NULL;
current_node = axiom_node_get_next_sibling( current_node, env))
{
current_element = axiom_node_get_data_element( current_node, env);
qname = axiom_element_get_qname( current_element, env, current_node);
element_qname = axutil_qname_create( env, "inputMessage", "http://www.abnamro.com/paymentrouter", "ns1");
if ( axutil_qname_equals( element_qname, env, qname))
{
/** found the requried element */
break;
}
}
if ( current_node != NULL)
{
text_value = axiom_element_get_text(current_element, env, current_node );
status = adb_inputMessage_set_inputMessage( _inputMessage, env,
text_value);
if( AXIS2_FAILURE == status)
{
AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "failed in setting the value for inputMessage "
" %d :: %s", env->error->error_number,
AXIS2_ERROR_GET_MESSAGE(env->error));
return AXIS2_FAILURE;
}
}
else
{
/** this is not a nillable element*/
AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "non nillable or minOuccrs != 0 element inputMessage missing"
" %d :: %s", env->error->error_number,
AXIS2_ERROR_GET_MESSAGE(env->error));
return AXIS2_FAILURE;
}
return status;
}
axiom_node_t* AXIS2_CALL
adb_inputMessage_serialize(
adb_inputMessage_t* _inputMessage,
const axutil_env_t *env, axiom_node_t* parent, int has_parent)
{
axiom_namespace_t *ns1 = NULL;
axis2_char_t *text_value_1;
axiom_node_t *current_node = NULL;
axiom_element_t *current_element = NULL;
axiom_data_source_t *data_source = NULL;
axutil_stream_t *stream = NULL;
axis2_char_t *start_input_str = NULL;
axis2_char_t *end_input_str = NULL;
unsigned int start_input_str_len = 0;
unsigned int end_input_str_len = 0;
AXIS2_ENV_CHECK(env, NULL);
ns1 = axiom_namespace_create (env,
"http://www.abnamro.com/paymentrouter",
"ns1");
if( parent == NULL)
{
current_element = axiom_element_create (env, parent, "inputMessage", ns1 , ¤t_node);
axiom_element_set_namespace( current_element, env, ns1, current_node);
parent = current_node;
}
if(has_parent)
{
data_source = axiom_node_get_data_element(parent, env);
if (!data_source)
return NULL;
stream = axiom_data_source_get_stream(data_source, env); /* assume parent is of type data source */
if (!stream)
return NULL;
current_node = parent;
}
else
{
data_source = axiom_data_source_create(env, parent, ¤t_node);
stream = axiom_data_source_get_stream(data_source, env);
}
/**
* parsing inputMessage element
*/
start_input_str = "<ns1:inputMessage>";
start_input_str_len = axutil_strlen(start_input_str);
end_input_str = "</ns1:inputMessage>";
end_input_str_len = axutil_strlen(end_input_str);
text_value_1 = _inputMessage->attrib_inputMessage;
axutil_stream_write(stream, env, start_input_str, start_input_str_len);
axutil_stream_write(stream, env, text_value_1, axutil_strlen(text_value_1));
axutil_stream_write(stream, env, end_input_str, end_input_str_len);
return parent;
}
/**
* getter for inputMessage.
*/
axis2_char_t* AXIS2_CALL
adb_inputMessage_get_inputMessage(
adb_inputMessage_t* _inputMessage,
const axutil_env_t *env)
{
AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
return _inputMessage-> attrib_inputMessage;
}
/**
* setter for inputMessage
*/
axis2_status_t AXIS2_CALL
adb_inputMessage_set_inputMessage(
adb_inputMessage_t* _inputMessage,
const axutil_env_t *env,
axis2_char_t* param_inputMessage)
{
AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
if(!_inputMessage)
{
return AXIS2_FAILURE;
}
if( NULL == param_inputMessage )
{
AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "inputMessage is NULL, but not a nullable element"
" %d :: %s", env->error->error_number,
AXIS2_ERROR_GET_MESSAGE(env->error));
return AXIS2_FAILURE;
}
_inputMessage-> attrib_inputMessage = param_inputMessage;
return AXIS2_SUCCESS;
}
#ifndef ADB_INPUTMESSAGE_H
#define ADB_INPUTMESSAGE_H
/**
* adb_inputMessage.h
*
* This file was auto-generated from WSDL
* by the Apache Axis2 version: 1.3 Built on : Aug 10, 2007 (04:45:58 LKT)
*/
#include <stdio.h>
#include <axiom.h>
#include <axutil_utils.h>
#include <axiom_soap.h>
#include <axis2_client.h>
#ifdef __cplusplus
extern "C"
{
#endif
#define AXIS2_DEFAULT_DIGIT_LIMIT 64
/**
* adb_inputMessage class class
*/
typedef struct adb_inputMessage adb_inputMessage_t;
AXIS2_EXTERN adb_inputMessage_t* AXIS2_CALL
adb_inputMessage_create(
const axutil_env_t *env );
axis2_status_t AXIS2_CALL
adb_inputMessage_free (
adb_inputMessage_t* _inputMessage,
const axutil_env_t *env);
axutil_qname_t* AXIS2_CALL
adb_inputMessage_get_qname (
adb_inputMessage_t* _inputMessage,
const axutil_env_t *env);
axiom_node_t* AXIS2_CALL
adb_inputMessage_serialize(
adb_inputMessage_t* _inputMessage,
const axutil_env_t *env,
axiom_node_t* inputMessage_om_node, int has_parent);
axis2_status_t AXIS2_CALL
adb_inputMessage_deserialize(
adb_inputMessage_t* _inputMessage,
const axutil_env_t *env, axiom_node_t* parent);
/**
* getter for inputMessage.
*/
axis2_char_t* AXIS2_CALL
adb_inputMessage_get_inputMessage(
adb_inputMessage_t* _inputMessage,
const axutil_env_t *env);
/**
* setter for inputMessage
*/
axis2_status_t AXIS2_CALL
adb_inputMessage_set_inputMessage(
adb_inputMessage_t* _inputMessage,
const axutil_env_t *env,
axis2_char_t* param_inputMessage);
#ifdef __cplusplus
}
#endif
#endif /* ADB_INPUTMESSAGE_H */
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]