示例#1
0
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;
}
示例#2
0
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;
}