Пример использования Soap over SSL для Citrus-Framework

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

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

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

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

1 ответ

Решение

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

<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

Другие вопросы по тегам