static axis2_status_t AXIS2_CALL CallbackOnFault(axis2_callback_t* pCallback, const axutil_env_t* pEnv, int nFaultCode) { if (!pCallback) { LogError() << "pCallback is NULL"; return AXIS2_FAILURE; } PICallback tpCallback(reinterpret_cast<ICallback<const DataObject&>*>(axis2_callback_get_data(pCallback))); axis2_callback_set_data(pCallback, NULL); // avoid axis2/c to destroy C++ data if (!tpCallback.get()) { LogError() << "pointer to ICallback is NULL"; return AXIS2_FAILURE; } axiom_node_t* pAxiomResponseNode = NULL; { axiom_soap_envelope_t* pSoapEnvelope = axis2_callback_get_envelope(pCallback, pEnv); if (pSoapEnvelope) { pAxiomResponseNode = axiom_soap_envelope_get_base_node(pSoapEnvelope, pEnv); #ifdef _DEBUG LogDebug2() << "Received Response: \n" << staff::ColorTextBlue << DataObject(pAxiomResponseNode).ToString() << staff::ColorDefault; #endif } } try { if (!pAxiomResponseNode) { CreateFault(*tpCallback, AXIS2_ERROR_GET_MESSAGE(pEnv->error), ToString(nFaultCode)); } else { tpCallback->OnFault(pAxiomResponseNode); } } STAFF_CATCH_ALL_DESCR("Error while processing response") return AXIS2_SUCCESS; }
void AXIS2_CALL axis2_stub_start_op_IIp2Location_get( axis2_stub_t *stub, const axutil_env_t *env, adb_get_t* _get, void *user_data, axis2_status_t ( AXIS2_CALL *on_complete ) (const axutil_env_t *, adb_getResponse_t* _getResponse, void *data) , axis2_status_t ( AXIS2_CALL *on_error ) (const axutil_env_t *, int exception, void *data) ) { axis2_callback_t *callback = NULL; axis2_svc_client_t *svc_client = NULL; axis2_options_t *options = NULL; const axis2_char_t *soap_action = NULL; axiom_node_t *payload = NULL; axis2_bool_t is_soap_act_set = AXIS2_TRUE; axutil_string_t *soap_act = NULL; struct axis2_stub_IIp2Location_get_callback_data *callback_data; callback_data = (struct axis2_stub_IIp2Location_get_callback_data*) AXIS2_MALLOC(env->allocator, sizeof(struct axis2_stub_IIp2Location_get_callback_data)); if(NULL == callback_data) { AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); AXIS2_LOG_ERROR( env->log, AXIS2_LOG_SI, "Can not allocate memeory for the callback data structures"); return; } payload = adb_get_serialize(_get, env, NULL, NULL, AXIS2_TRUE, NULL, NULL); svc_client = axis2_stub_get_svc_client(stub, env ); options = axis2_stub_get_options( stub, env); if (NULL == options) { AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_NULL_PARAM, AXIS2_FAILURE); AXIS2_LOG_ERROR( env->log, AXIS2_LOG_SI, "options is null in stub"); return; } soap_act =axis2_options_get_soap_action (options, env); if (NULL == soap_act) { is_soap_act_set = AXIS2_FALSE; soap_action = "urn:get"; soap_act = axutil_string_create(env, "urn:get"); axis2_options_set_soap_action(options, env, soap_act); } axis2_options_set_soap_version(options, env, AXIOM_SOAP12); callback = axis2_callback_create(env); /* Set our on_complete fucntion pointer to the callback object */ axis2_callback_set_on_complete(callback, axis2_stub_on_complete_IIp2Location_get); /* Set our on_error function pointer to the callback object */ axis2_callback_set_on_error(callback, axis2_stub_on_error_IIp2Location_get); callback_data-> data = user_data; callback_data-> on_complete = on_complete; callback_data-> on_error = on_error; axis2_callback_set_data(callback, (void*)callback_data); /* Send request */ axis2_svc_client_send_receive_non_blocking(svc_client, env, payload, callback); if (!is_soap_act_set) { axis2_options_set_soap_action(options, env, NULL); axis2_options_set_action(options, env, NULL); } }