2016-11-14 2 views
0

Я пытаюсь использовать Citrus-framework для настройки регрессионных тестов, когда мы обновляем маршруты Talend ESB до последней версии. Наши маршруты - это, прежде всего, Soap over SSL, защищенные нашим локальным ЦС и требующие сертификата для авторизации. Я следил за проектом «образец мыла» и заставлял его работать с переопределением требования к сертификату временно. Я потерялся, пытаясь заставить его использовать сертификат для вызовов клиентов на наш маршрут ESB. Я нашел проект-https на citrusframework.org, но, похоже, он сделан для служб Rest, и я не мог заставить его работать с моими полезными нагрузками на мыло.Citrus-Framework Soap over SSL sample

Моя конечная цель - назвать наш существующий маршрут, а затем вызывать последнюю версию маршрута и сравнить XML, возвращенный с каким-то кодом groovy, чтобы подтвердить, что они идентичны.

Есть ли существо, которое существует в виде Soap over SSL, которое поможет мне понять, что я делаю неправильно с моим проектом?

Я попытался добавить образец-https-код в мой проект с мылом без успеха. Ошибка, которую я получаю, - это ошибки ssl-handshake, которые, как я знаю, связаны с сертификатом, поскольку я уверен, что не прикрепляю действительный сертификат с моей полезной нагрузкой.

ответ

0

Ваша конфигурация должна быть немного отличающейся от образца https. Вы должны установить отправителя сообщения на клиенте SOAP веб-службы Citrus:

<bean class="com.consol.citrus.samples.todolist.config.SoapClientSslConfig"/> 

<citrus-ws:client id="todoClient" 
        request-url="https://localhost:8443" 
        message-sender="sslRequestMessageSender"/> 

Свидетельство настраивается в контексте SSL HTTP-клиент.

@Configuration 
public class SoapClientSslConfig { 

    @Bean 
    public HttpClient httpClient() { 
     try { 
      SSLContext sslcontext = SSLContexts.custom() 
        .loadTrustMaterial(new ClassPathResource("keys/citrus.jks").getFile(), "secret".toCharArray(), 
          new TrustSelfSignedStrategy()) 
        .build(); 

      SSLConnectionSocketFactory sslSocketFactory = new SSLConnectionSocketFactory(
        sslcontext, NoopHostnameVerifier.INSTANCE); 

      return HttpClients.custom() 
        .setSSLSocketFactory(sslSocketFactory) 
        .setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE) 
        .addInterceptorFirst(new HttpComponentsMessageSender.RemoveSoapHeadersInterceptor()) 
        .build(); 
     } catch (IOException | CertificateException | NoSuchAlgorithmException | KeyStoreException | KeyManagementException e) { 
      throw new BeanCreationException("Failed to create http client for ssl connection", e); 
     } 
    } 

    @Bean 
    public HttpComponentsMessageSender sslRequestMessageSender() { 
     return new HttpComponentsMessageSender(httpClient()); 
    } 
} 

Пример кода теперь также доступен на GitHub: https://github.com/christophd/citrus-samples/tree/master/sample-soap-ssl