URL привязки WSDL меняет протокол на HTTP, когда за окончанием SSL - PullRequest
0 голосов
/ 29 августа 2018

У нас есть простой SOAP-сервер jax-ws, поддерживаемый Apache CXF 3.2.6 в автономном (автономном) режиме, в котором используется встроенная Jetty. Сервер был сгенерирован wsdl-first с использованием CXF wsdl2java. WSDL - это файл в пути к классам, и этот физический файл WSDL имеет https://.... в атрибуте location элемента soapbind:address.

При запуске сервер публикует на http://0.0.0.0:8080. Сервер также находится за SSL-терминацией, которая маршрутизирует https://external-name -> SSL-терминацию -> http://internal-name:8080, поэтому внешне служба и ее WSDL доступны по адресу https://external-name.

Проблема заключается в том, что при запросе WSDL от развернутого сервера через https://external-name?wsdl CXF изменяет атрибут location элемента soapbind:address в результирующем файле на http://external-name (изменяет протокол на HTTP с HTTPS и сохраняет все остальное), что вызывает проблемы с генерацией клиентских прокси, пользовательского интерфейса Soap и т. д.

Что еще хуже, наш сервис не может быть использован SOA нашего партнера, который обеспечивает использование только опубликованного местоположения из WSDL.

Как мы можем решить эту проблему, если не считать удаления терминации SSL и иметь CXF для обработки SSL самостоятельно? (что ужасно из-за кошмара обслуживания хранилища ключей Java и необходимости хранить сертификат всей компании + закрытый ключ в экземпляре сервера).

1 Ответ

0 голосов
/ 29 августа 2018

Вы можете установить желаемый адрес как publishedEndpointUrl в конфигурации. Смотри: http://cxf.apache.org/docs/jax-ws-configuration.html

...