Приветствую всех участников форума.
Меня зовут Джозеп. Я инженер по вычислительной технике, но ранее я не работал с осью 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;
}
Вы видите что-то не так? оставил мне шаг? Любая помощь это хорошо.
Спросите меня, если нужно.
Спасибо
Хосеп Фернандес.