axis2_char_t* AXIS2_CALL sandesha2_rm_elements_get_addr_ns_val_from_env( const axutil_env_t *env, axiom_soap_envelope_t *soap_envelope, axis2_char_t *action) { axiom_soap_header_t *soap_header = NULL; AXIS2_PARAM_CHECK(env->error, soap_envelope, NULL); AXIS2_PARAM_CHECK(env->error, action, NULL); soap_header = axiom_soap_envelope_get_header(soap_envelope, env); if(soap_header) { axutil_array_list_t *headers = NULL; axiom_node_t *soap_header_node = NULL; axiom_element_t *soap_header_element = NULL; axiom_namespace_t *addr_ns = NULL; headers = axiom_soap_header_get_header_blocks_with_namespace_uri( soap_header, env, AXIS2_WSA_NAMESPACE); if(headers && 0 < axutil_array_list_size(headers, env)) { axutil_array_list_free(headers, env); return AXIS2_WSA_NAMESPACE; } headers = axiom_soap_header_get_header_blocks_with_namespace_uri( soap_header, env, AXIS2_WSA_NAMESPACE_SUBMISSION); if(headers && 0 < axutil_array_list_size(headers, env)) { axutil_array_list_free(headers, env); return AXIS2_WSA_NAMESPACE_SUBMISSION; } if(headers) axutil_array_list_free(headers, env); soap_header_node = axiom_soap_header_get_base_node(soap_header, env); soap_header_element = axiom_node_get_data_element(soap_header_node, env); addr_ns = axiom_element_get_namespace(soap_header_element, env, soap_header_node); if(addr_ns) { axis2_char_t *str_addr_ns = axiom_namespace_get_uri(addr_ns, env); return str_addr_ns; } } return NULL; }
axis2_char_t* AXIS2_CALL sandesha2_rm_elements_get_rm_ns_val( const axutil_env_t *env, axiom_soap_envelope_t *soap_envelope, axis2_char_t *action) { axiom_soap_header_t *soap_header = NULL; AXIS2_PARAM_CHECK(env->error, soap_envelope, NULL); AXIS2_PARAM_CHECK(env->error, action, NULL); soap_header = axiom_soap_envelope_get_header(soap_envelope, env); if(soap_header) { axutil_array_list_t *headers = NULL; headers = axiom_soap_header_get_header_blocks_with_namespace_uri(soap_header, env, SANDESHA2_SPEC_2005_02_NS_URI); if(headers && 0 < axutil_array_list_size(headers, env)) { if(headers) { axutil_array_list_free(headers, env); } return SANDESHA2_SPEC_2005_02_NS_URI; } headers = axiom_soap_header_get_header_blocks_with_namespace_uri(soap_header, env, SANDESHA2_SPEC_2007_02_NS_URI); if(headers && 0 < axutil_array_list_size(headers, env)) { if(headers) { axutil_array_list_free(headers, env); } return SANDESHA2_SPEC_2007_02_NS_URI; } headers = axiom_soap_header_get_header_blocks_with_namespace_uri(soap_header, env, MAKE_CONNECTION_SPEC_2007_02_NS_URI); if(headers && 0 < axutil_array_list_size(headers, env)) { if(headers) { axutil_array_list_free(headers, env); } return MAKE_CONNECTION_SPEC_2007_02_NS_URI; } } if(!action) { return NULL; } if(0 == axutil_strcmp(action, SANDESHA2_SPEC_2005_02_ACTION_CREATE_SEQ)) return SANDESHA2_SPEC_2005_02_NS_URI; if(0 == axutil_strcmp(action, SANDESHA2_SPEC_2005_02_ACTION_CREATE_SEQ_RESPONSE)) return SANDESHA2_SPEC_2005_02_NS_URI; if(0 == axutil_strcmp(action, SANDESHA2_SPEC_2005_02_ACTION_SEQ_ACKNOWLEDGEMENT)) return SANDESHA2_SPEC_2005_02_NS_URI; if(0 == axutil_strcmp(action, SANDESHA2_SPEC_2005_02_ACTION_TERMINATE_SEQ)) return SANDESHA2_SPEC_2005_02_NS_URI; if(0 == axutil_strcmp(action, SANDESHA2_SPEC_2007_02_ACTION_CREATE_SEQ)) return SANDESHA2_SPEC_2007_02_NS_URI; if(0 == axutil_strcmp(action, SANDESHA2_SPEC_2007_02_ACTION_CREATE_SEQ_RESPONSE)) return SANDESHA2_SPEC_2007_02_NS_URI; if(0 == axutil_strcmp(action, SANDESHA2_SPEC_2007_02_ACTION_SEQ_ACKNOWLEDGEMENT)) return SANDESHA2_SPEC_2007_02_NS_URI; if(0 == axutil_strcmp(action, SANDESHA2_SPEC_2007_02_ACTION_TERMINATE_SEQ)) return SANDESHA2_SPEC_2007_02_NS_URI; if(0 == axutil_strcmp(action, SANDESHA2_SPEC_2007_02_ACTION_CLOSE_SEQ)) return SANDESHA2_SPEC_2007_02_NS_URI; if(0 == axutil_strcmp(action, SANDESHA2_SPEC_2007_02_ACTION_TERMINATE_SEQ_RESPONSE)) return SANDESHA2_SPEC_2007_02_NS_URI; if(0 == axutil_strcmp(action, SANDESHA2_SPEC_2007_02_ACTION_CLOSE_SEQ_RESPONSE)) return SANDESHA2_SPEC_2007_02_NS_URI; if(!axutil_strcmp(action, SANDESHA2_SPEC_2007_02_ACTION_MAKE_CONNECTION)) { return MAKE_CONNECTION_SPEC_2007_02_NS_URI; } return NULL; }
axis2_status_t AXIS2_CALL axis2_addr_in_handler_invoke( struct axis2_handler * handler, const axutil_env_t * env, struct axis2_msg_ctx * msg_ctx) { axiom_soap_envelope_t *soap_envelope = NULL; axiom_soap_header_t *soap_header = NULL; axutil_property_t *property = NULL; axis2_status_t status = AXIS2_FAILURE; AXIS2_ENV_CHECK(env, AXIS2_FAILURE); AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE); AXIS2_LOG_INFO(env->log, "Starting addressing in handler"); soap_envelope = axis2_msg_ctx_get_soap_envelope(msg_ctx, env); if (soap_envelope) { soap_header = axiom_soap_envelope_get_header(soap_envelope, env); if (soap_header) { axutil_array_list_t *addr_headers = NULL; axis2_ctx_t *ctx = NULL; axis2_char_t *addr_ns_str = NULL; axis2_msg_info_headers_t *msg_info_headers = axis2_msg_ctx_get_msg_info_headers(msg_ctx, env); addr_headers = axiom_soap_header_get_header_blocks_with_namespace_uri (soap_header, env, AXIS2_WSA_NAMESPACE_SUBMISSION); if (addr_headers) { addr_ns_str = axutil_strdup(env, AXIS2_WSA_NAMESPACE_SUBMISSION); /*status = axis2_addr_in_extract_addr_submission_info(env, soap_header, &msg_info_headers, addr_headers, msg_ctx);*/ status = axis2_addr_in_extract_addr_params(env, soap_header, &msg_info_headers, addr_headers, AXIS2_WSA_NAMESPACE_SUBMISSION, msg_ctx); } else { addr_headers = axiom_soap_header_get_header_blocks_with_namespace_uri (soap_header, env, AXIS2_WSA_NAMESPACE); if (addr_headers) { addr_ns_str = axutil_strdup(env, AXIS2_WSA_NAMESPACE); /*status = axis2_addr_in_extract_addr_final_info(env, soap_header, &msg_info_headers, addr_headers, msg_ctx);*/ status = axis2_addr_in_extract_addr_params(env, soap_header, &msg_info_headers, addr_headers, AXIS2_WSA_NAMESPACE, msg_ctx); axis2_addr_in_extract_ref_params(env, soap_header, axis2_msg_ctx_get_msg_info_headers (msg_ctx, env)); } else { /* addressing headers are not present in the SOAP message */ AXIS2_LOG_INFO(env->log, AXIS2_LOG_SI, "No Addressing Headers present in the IN message. Addressing In Handler cannot do anything."); return AXIS2_SUCCESS; /* no addressing heades means addressing not in use */ } } ctx = axis2_msg_ctx_get_base(msg_ctx, env); if (ctx) { property = axutil_property_create(env); axutil_property_set_scope(property, env, AXIS2_SCOPE_REQUEST); axutil_property_set_value(property, env, addr_ns_str); axis2_ctx_set_property(ctx, env, AXIS2_WSA_VERSION, property); } /* extract service group context, if available */ axis2_addr_in_extract_svc_grp_ctx_id(env, soap_header, msg_ctx); axutil_array_list_free(addr_headers, env); return status; } } return AXIS2_SUCCESS; }