Получение исключения при использовании веб-сервиса https в mule

#https #cxf #mule

#https #cxf #mule

Вопрос:

Я пытаюсь вызвать веб-службу https, используя сгенерированные cxf клиентские прокси в Mule. Почти в 99% случаев я получаю

Caused by: org.apache.commons.httpclient.ProtocolException: Unbuffered entity enclosing request can not be repeated.
at org.apache.commons.httpclient.methods.EntityEnclosingMethod.writeRequestBody(EntityEnclosingMethod.java:487)
at org.apache.commons.httpclient.HttpMethodBase.writeRequest(HttpMethodBase.java:2114)
at org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java:1096)*

Приложение имеет входящую конечную точку http. Mule Java transformer пытается вызвать веб-сервис с использованием https, используя сгенерированные cxf клиентские прокси. Я сталкиваюсь с вышеуказанным исключением.

Я предоставил скриншот потока mule [http://i.stack.imgur.com/7X9Wg.jpg ]. Очень признателен!!

Mule config xml

 <cxf:jaxws-service serviceClass="test.service.https.TestService" doc:name="SOAP" configuration-ref="CXF_Configuration" enableMuleSoapHeaders="false"/>
<custom-transformer class="test.service.https.CallLicenseService" doc:name="Calls HTTPS WS using CXF generated client proxies" encoding="UTF-8" mimeType="text/plain"/>
<logger message="Success" level="INFO" doc:name="Logger"/>
<set-payload value="#['HELLO SUCCESS']" doc:name="Set Payload"/> </flow>
  

Трансформатор
URL wsdlURL = null;
String serviceUrl = «TARGET_HTTPS_WSDL»; // Это будет целевой URL-адрес https

     try {
        wsdlURL = new URL(serviceUrl);
    } catch (MalformedURLException e) {
        Logger.getLogger(getClass()).info("", e);
    }

    AuditLogServiceService ss = new AuditLogServiceService(wsdlURL);
    AuditLoggingService port = ss.getAuditLoggingServicePort();
    ((BindingProvider) port).getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, 
            serviceUrl.substring(0, serviceUrl.length() - 5));
    AuditLogServiceRequest request = new AuditLogServiceRequest();
    request.setClientId("4");
    request.setUserId("101");
    request.setEventSubType("1");
    request.setEventType("1");
    AuditLogMessage msg = new AuditLogMessage();
    msg.setMessage("Hello Test");
    request.getLogMessages().add(msg);
    AuditLogServiceResponse response = port.logEvent(request);
    System.out.println(response.getMessage());
  

возвращает response.GetMessage();

Комментарии:

1. Не могли бы вы поделиться своим потоком, чтобы проверить, что вызывает проблему

2. Я добавил подробности к вопросу, который я опубликовал. Пожалуйста, дайте мне знать, если вам нужна более подробная информация.

Ответ №1:

Прежде всего, если вам нужно использовать веб-сервис, вам нужно поставить <cxf:jaxws-client serviceClass вместо cxf:jaxws-client …следующий шаг — вам нужно использовать исходящую конечную точку http для отправки на внешний веб-сервис… пожалуйста, перейдите по следующей ссылке:- http://www.mulesoft.org/documentation/display/current/Consuming Web Services with CXF

Еще одна вещь.. вам нужно использовать java component вместо <custom-transformer class .. вам нужно установить полезную нагрузку непосредственно перед компонентом… Я имею в виду, что вам нужно установить полезную нагрузку, прежде чем отправлять ее на внешний веб-сервис

Комментарии:

1. Спасибо Anirban. Но мы планируем интегрировать библиотеку, которая будет вызывать https с использованием клиентских прокси CXF. В зависимости от бизнес-потока будет несколько вызовов https для разных WS. Этот Mule — это POC, который мы пытались проверить, прежде чем приступить к дальнейшей реализации. Мы попробовали подход, рекомендованный Mule «С использованием клиентского API JAX-WS», но он не работает для вызовов https.

2. Mule — отличная платформа для размещения службы, а также для использования внешней службы .. Используя Mule, вы можете вызвать несколько служб очень простым способом… Вам просто нужно правильно настроить конфигурацию… Вот и все … Здесь, в вашем потоке, вы неправильно настроили.. Должно быть http:inbound конечная точка, установленная полезная нагрузка, cxf: jaxws-клиент и http:outbount конечная точка для публикации данных .. Вот и все . пожалуйста, обратитесь к следующим 2 ссылкам:- training.middlewareschool.com/mule /… и training.middlewareschool.com/mule/consuming-wsdl-first-service