axis-c-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From manoj dhyani <mdhy...@hotmail.com>
Subject axis2_svc_client_send_receive taking lot of memory
Date Wed, 13 Feb 2013 20:55:43 GMT

I am using Axis2c 1.6 

 

for one of the webservice the response is huge, the response XML is around 800 MB

while invoking this service from my Webservice Client which is using axis2c, the memory usage
of th process goes to around 5 GB when axis2_svc_client_send_receive call is started

is their any way to tune this ? any options etc that can set on the client side

is their any way to stream the response to a file instead of caching in the memory, I do see
a method to write to file (axiom_xml_writer_create), but that can be called after this call
is done so that is not useful

 

following is the code, other thing is I am calling all the requierd free functions, but even
after that the process memory doesn't go down is this a bug?

 

axiom_node_t * node = NULL;
node = axis2_svc_client_send_receive(_wsf_service_client, _env, firstChild);

if(node == NULL)
{
throw Error("Error");
}

if (axis2_svc_client_get_last_response_has_fault(_wsf_service_client, _env))
{
//handle fault

}
else
{
axis2_char_t* xmlreply = NULL;
axiom_xml_writer_t *xml_writer = NULL;
axiom_output_t* om_output = NULL;
xml_writer = axiom_xml_writer_create_for_memory(_env, NULL, AXIS2_TRUE, 0, AXIS2_XML_PARSER_TYPE_BUFFER);
om_output = axiom_output_create(_env, xml_writer);
axiom_namespace_t* ns_xsi =  axiom_namespace_create(_env, "http://www.w3.org/2001/XMLSchema-instance",
"xsi");
axiom_element_t* node_ele  = (axiom_element_t*) axiom_node_get_data_element(node, _env);
axiom_element_declare_namespace_assume_param_ownership(node_ele, _env, ns_xsi);
axiom_node_serialize_sub_tree(node, _env, om_output);
xmlreply = (axis2_char_t*)axiom_xml_writer_get_xml(xml_writer, _env);
axiom_node_free_tree(node, _env);
}

if (om_output)
{
     axiom_output_free(om_output, env);
     om_output = NULL;
}

if (wsf_service_client)
{
axis2_svc_client_free(wsf_service_client, env);
wsf_service_client = NULL;
}

if(om_builder)
{
    axiom_stax_builder_free(om_builder, env);
om_builder = NULL;
}

if (env)
{
axutil_env_free((axutil_env_t *) env);
env = NULL;
}

 

Thanks and Regards

Manoj
 		 	   		  
Mime
View raw message