/*

*Copyright2004,2005TheApacheSoftwareFoundation.

*

*LicensedundertheApacheLicense,Version2.0(the"License");

*youmaynotusethisfileexceptincompliancewiththeLicense.

*YoumayobtainacopyoftheLicenseat

*

*http://www.apache.org/licenses/LICENSE-2.0

*

*Unlessrequiredbyapplicablelaworagreedtoinwriting,software

*distributedundertheLicenseisdistributedonan"ASIS"BASIS,

*WITHOUTWARRANTIESORCONDITIONSOFANYKIND,eitherexpressorimplied.

*SeetheLicenseforthespecificlanguagegoverningpermissionsand

*limitationsundertheLicense.

*/




#include<stdio.h>

#include<axiom.h>

#include<axis2_util.h>

#include<axiom_soap.h>

#include<axis2_client.h>



axiom_node_t*

build_om_request(constaxutil_env_t*env);



constaxis2_char_t*

process_om_response(constaxutil_env_t*env,

axiom_node_t*node);



intmain(intargc,char**argv)

{

constaxutil_env_t*env=NULL;

constaxis2_char_t*address=NULL;

axis2_endpoint_ref_t*endpoint_ref=NULL;

axis2_options_t*options=NULL;

constaxis2_char_t*client_home=NULL;

axis2_svc_client_t*svc_client=NULL;

axiom_node_t*payload=NULL;

axiom_node_t*ret_node=NULL;



env=axutil_env_create_all("hello_client.log",AXIS2_LOG_LEVEL_TRACE);



options=axis2_options_create(env);



address="http://localhost:9090/axis2/services/hello";

if(argc>1)

address=argv[1];

if(axutil_strcmp(address,"-h")==0)

{

printf("Usage:%s[endpoint_url]\n",argv[0]);

printf("use-hforhelp\n");

return0;

}

printf("Usingendpoint:%s\n",address);

endpoint_ref=axis2_endpoint_ref_create(env,address);

axis2_options_set_to(options,env,endpoint_ref);



client_home=AXIS2_GETENV("AXIS2C_HOME");

if(!client_home&&!strcmp(client_home,""))

client_home="../..";



svc_client=axis2_svc_client_create(env,client_home);

if(!svc_client)

{

printf("Errorcreatingserviceclient\n");

AXIS2_LOG_ERROR(env->log,AXIS2_LOG_SI,"StubinvokeFAILED:Errorcode:"

"%d::%s",env->error->error_number,

AXIS2_ERROR_GET_MESSAGE(env->error));

return-1;

}



axis2_svc_client_set_options(svc_client,env,options);



payload=build_om_request(env);



ret_node=axis2_svc_client_send_receive(svc_client,env,payload);



if(ret_node)

{

constaxis2_char_t*greeting=process_om_response(env,ret_node);

if(greeting)

printf("\nReceivedgreeting:\"%s\"fromservice\n",greeting);



axiom_node_free_tree(ret_node,env);

ret_node=NULL;

}

else

{

AXIS2_LOG_ERROR(env->log,AXIS2_LOG_SI,"StubinvokeFAILED:Errorcode:"

"%d::%s",env->error->error_number,

AXIS2_ERROR_GET_MESSAGE(env->error));

printf("helloclientinvokeFAILED!\n");

}



if(svc_client)

{

axis2_svc_client_free(svc_client,env);

svc_client=NULL;

}



if(env)

{

axutil_env_free((axutil_env_t*)env);

env=NULL;

}



return0;

}



axiom_node_t*

build_om_request(constaxutil_env_t*env)

{

axiom_node_t*greet_om_node=NULL;

axiom_element_t*greet_om_ele=NULL;



greet_om_ele=axiom_element_create(env,NULL,"greet",NULL,&greet_om_node);

axiom_element_set_text(greet_om_ele,env,"HelloServer!",greet_om_node);



returngreet_om_node;

}



constaxis2_char_t*

process_om_response(constaxutil_env_t*env,

axiom_node_t*node)

{

axiom_node_t*service_greeting_node=NULL;

axiom_node_t*return_node=NULL;



if(node)

{

service_greeting_node=axiom_node_get_first_child(node,env);

if(service_greeting_node&&

axiom_node_get_node_type(service_greeting_node,env)==AXIOM_TEXT)

{

axiom_text_t*greeting=(axiom_text_t*)axiom_node_get_data_element(service_greeting_node,env);

if(greeting&&axiom_text_get_value(greeting,env))

{

returnaxiom_text_get_value(greeting,env);

}

}

}

returnNULL;

}