Axis2 C. Клиентская сторона не может подключиться к веб-серверу - PullRequest
1 голос
/ 17 января 2020

Приветствую всех участников форума.

Меня зовут Джозеп. Я инженер по вычислительной технике, но ранее я не работал с осью 2. Я хочу поднять проблему, чтобы посмотреть, сможет ли кто-нибудь мне помочь. (заранее спасибо) [Я искал предыдущие сообщения на форуме и в Google, но не смог найти решение.]

Я создаю код для подключения в качестве клиента к веб-службе. (только клиент сервер находится на другом компьютере, уже работает) [Я запускаю свой код из примера ECHO. Я нашел его в https://github.com/bnoordhuis/axis2-c/blob/master/samples/client/echo/echo.c]

Я создаю запрос. Я отправляю это, но я не получаю ответ. Этот же запрос я выполняю в SOAP ui, и он работает правильно. Я подозреваю, что это вопрос аутентификации, но я не знаю, что еще доказать.

Функция axis2_svc_client_send_receive () возвращает NULL. И в журнале оси C эти ошибки:


[Thu Jan 16 17:56:01 2020] [info]  Starting addressing out handler
[Thu Jan 16 17:56:01 2020] [debug] ..\..\src\modules\mod_addr\addr_out_handler.c(133) No action present. Stop processing addressing
[Thu Jan 16 17:56:01 2020] [debug] ..\..\src\core\transport\http\sender\http_transport_sender.c(246) ctx_epr:http://XXXXXXXXXXXXXXXXXXXXXXX/CustomerInstanceWS?wsdl
[Thu Jan 16 17:56:01 2020] [debug] ..\..\src\core\transport\http\sender\http_transport_sender.c(805) using axis2 native http sender.
[Thu Jan 16 17:56:01 2020] [debug] ..\..\src\core\transport\http\sender\http_sender.c(416) msg_ctx_id:xxxxxxxxxxxxxxxxxxxxxxxxx
[Thu Jan 16 17:56:01 2020] [error] ..\..\src\core\transport\http\sender\http_client.c(667) Content-Type header missing in HTTP response
[Thu Jan 16 17:56:01 2020] [error] ..\..\src\core\transport\http\sender\http_client.c(668) Response does not contain Content-Type
[Thu Jan 16 17:56:01 2020] [error] ..\..\src\core\transport\http\sender\http_client.c(667) Content-Type header missing in HTTP response
[Thu Jan 16 17:56:01 2020] [error] ..\..\src\core\transport\http\sender\http_client.c(668) Response does not contain Content-Type
[Thu Jan 16 17:56:01 2020] [error] ..\..\src\core\transport\http\sender\http_sender.c(1381) status_code < 0
[Thu Jan 16 17:56:01 2020] [error] ..\..\src\core\engine\engine.c(179) Transport sender invoke failed
[Thu Jan 16 17:56:01 2020] [error] d:\tes.cpp(240) Stub invoke FAILED: Error code: 91 :: Content-Type header missing in HTTP response.

Я копирую свой код здесь (я изменил адреса на XXX при публикации)



// tes.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

#include "axis2_stub_CustomerInstanceWS.h"


#include <stdio.h>
#include <axiom.h>
#include <axis2_util.h>
#include <axiom_soap.h>
#include <axis2_client.h>

/* build SOAP request message content using OM */
axiom_node_t* build_om_payload_for_echo_svc(const axutil_env_t *env, int customerId)
{
                //Declaracion de variables
                axis2_char_t *om_str = NULL;
                axiom_namespace_t* soapenv = NULL;
                axiom_namespace_t* es = NULL;
                axiom_namespace_t* es1 = NULL;

                axiom_node_t* envelope_node = NULL;
                axiom_element_t* envelope_ele = NULL;

                axiom_node_t* header_node = NULL;
                axiom_element_t* header_ele = NULL;

                axiom_node_t* body_node = NULL;
                axiom_element_t* body_ele = NULL;

                axiom_node_t* getCustomerData_node = NULL;
                axiom_element_t* getCustomerData_ele = NULL;

                axiom_node_t* getCustomerDataCriteria_node = NULL;
                axiom_element_t* getCustomerDataCriteria_ele = NULL;

                axiom_node_t* customerId_node = NULL;
                axiom_element_t* customerId_ele = NULL;

                //Preparamos los Namespaces
                soapenv = axiom_namespace_create(env, "http://XXXXXXXXXXXXXXXXXXXXXXXXXX/", "soapenv");
                es = axiom_namespace_create(env, "http://XXXXXXXXXXXXXXXXXXXXXXXXXX/", "es");
                es1 = axiom_namespace_create(env, "http://XXXXXXXXXXXXXXXXXXXXXXXXXX/", "es1");

                //Preparamos los parametros
                char Char_customerId[20];
                sprintf(Char_customerId, "%d", customerId);

                //Construimos el REQUEST
                envelope_ele = axiom_element_create(env, NULL, "Envelope", soapenv, &envelope_node);
                header_ele = axiom_element_create(env, envelope_node, "Header", soapenv, &header_node);
                body_ele = axiom_element_create(env, envelope_node, "Body", soapenv, &body_node);
                getCustomerData_ele = axiom_element_create(env, body_node, "getCustomerData", es, &getCustomerData_node);
                getCustomerDataCriteria_ele = axiom_element_create(env, getCustomerData_node, "getCustomerDataCriteria", NULL, &getCustomerDataCriteria_node);
                customerId_ele = axiom_element_create(env, getCustomerDataCriteria_node, "customerId", es1, &customerId_node);

                //Seteamos parametros para la peticion
                axiom_element_set_text(customerId_ele, env, Char_customerId, customerId_node);

                om_str = axiom_node_to_string(envelope_node, env);

                if (om_str)
                {
                               printf("\nSending OM : %s\n", om_str);
                               AXIS2_FREE(env->allocator, om_str);
                               om_str = NULL;
                }
                return envelope_node;
}

int main()
{
                axutil_env_t* env = NULL;
                env = axutil_env_create_all("CustomerInstance.log", AXIS2_LOG_LEVEL_TRACE);

                axis2_char_t* address = "http://XXXXXXXXXXXXXX/CustomerInstanceWS?wsdl";

                /* Create EPR with given address */
                axis2_endpoint_ref_t* endpoint_ref;
                endpoint_ref = axis2_endpoint_ref_create(env, address);

                /* Setup options */
                axis2_options_t* options_1;
                options_1 = axis2_options_create(env);
                axis2_options_set_to(options_1, env, endpoint_ref);

                ///* Set the deploy folder */
                axis2_char_t* client_home = NULL;
                client_home = AXIS2_GETENV("AXIS2C_HOME");
                if (!client_home)
                {
                               client_home = "../../deploy";
                }

                //* Create service client */
                axis2_svc_client_t* svc_client;
                svc_client = axis2_svc_client_create(env, client_home);
                if (!svc_client)
                {
                               printf("Error creating service client\n");
                               AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Stub invoke FAILED: Error code : %d :: %s", env->error->error_number, AXIS2_ERROR_GET_MESSAGE(env->error));
                }

                //JFI testeamos con esta funcion la AUTENTICACION en el Web Service.
                axis2_status_t status = axis2_options_set_http_auth_info(options_1, env, "C3POxyz", "Admin", "Basic");
                printf("INTENTO DE AUTENTICACION!!!!. Retorno status <%d>\n", status);

                ///* Set service client options */
                axis2_svc_client_set_options(svc_client, env, options_1);

                axiom_node_t* payload;
                payload = build_om_payload_for_echo_svc(env, 2);

                ///* Send request */
                axiom_node_t* ret_node;
                ret_node = axis2_svc_client_send_receive(svc_client, env, payload);

                ///* Print result */
                if (ret_node)
                {
                               axis2_char_t *om_str = NULL;
                               om_str = axiom_node_to_string(ret_node, env);
                               if (om_str)
                               {
                                               printf("\nReceived OM : %s\n", om_str);
                               }
                               printf("\necho client invoke SUCCESSFUL!\n");
                }
                else
                {
                               AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Stub invoke FAILED: Error code: %d :: %s.", env->error->error_number, AXIS2_ERROR_GET_MESSAGE(env->error));
                               printf("echo client invoke FAILED!\n");
                }

                return 0;
}

Вы видите что-то не так? оставил мне шаг? Любая помощь это хорошо.

Спросите меня, если нужно.

Спасибо

Хосеп Фернандес.

...