У меня есть сервер Tomcat, работающий «позади» Apache 2 (через mod_proxy), в Tomcat есть служба WAR, генерирующая Spring, с помощью веб-служб, которые предоставляют такую услугу, как это одна:Spring Generated WSDL предоставляет неверный протокол (HTTP vs HTTPS). Конечная точка
<wsdl:service name="EcoboxPortService">
<wsdl:port binding="tns:EcoboxPortSoap11" name="EcoboxPortSoap11">
<soap:address location="http://host:80/ecobox-ws/Ecobox"/>
</wsdl:port>
</wsdl:service>
проблема заключается в том, что WSDL фактически получают по следующему адресу:
https://host/ecobox-ws/ecobox.wsdl (Please note it uses HTTPS)
Учитывая выше 2 вопроса возникают:
- Почему WSDL добавляет порт «80» в местоположение конечной точки? Может ли это быть отменено?
- Почему он получает протокол «http», несмотря на то, что фактический URL-адрес был запрошен через «https»? Не Spring интерпретирует заголовки «X-forwarded-for»?
Аналогичный вопрос, но не совсем полезные: change the soap:address location in generated wsdl
Соответствующие зависимости:
<dependency>
<groupId>org.springframework.ws</groupId>
<artifactId>spring-ws-core</artifactId>
<version>2.2.2.RELEASE</version>
</dependency>
Соответствующие web.xml выдержка:
<servlet>
<servlet-name>spring-ws</servlet-name>
<servlet-class>org.springframework.ws.transport.http.MessageDispatcherServlet</servlet-class>
<init-param>
<param-name>transformWsdlLocations</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
Включен ли ваш сервер (tomcat и или Apache) для обслуживания ресурсов в HTTP? Мне кажется, что-то более похожее на tomcat. Может ли ваше веб-приложение обслуживать ресурсы в HTTP? –
@AngeloImmediata yes, на самом деле Tomcat настроен только для HTTP, но Apache для обоих – gvasquez
Когда вы пытаетесь отобразить WSDL, набрав URL-адрес http: // ..... вы проверяли, переадресовываете ли вы в https? Если это так ... это связано с конфигурацией Apache. Еще одна проверка, которую вы можете сделать, - это получить доступ к WSDL напрямую (возможно, wget на сервере). –