конечная точка jax-ws веб-сервиса всегда localhost - PullRequest
3 голосов
/ 19 сентября 2011

Мне действительно нужна твоя помощь. Я читал, что wsdl для веб-сервиса jax-ws будет генерироваться на лету для каждого запроса. Таким образом, адреса, подобные конечной точке мыла, будут настроены на URL запроса.

В моем случае, независимо от внутреннего или внешнего запроса, адреса всегда ссылаются на localhost: 8080.

У sb есть подсказка, как я могу решить эту проблему?

Заранее спасибо


Может быть, я не очень хорошо описал свою проблему.

  1. У меня есть ws, созданный с помощью jax-ws
  2. Развернуто на сервере Tomcat 5.5.17
  3. Доступ с локального ip работает нормально http://192.168.1.20:8070/mywebservice?wsdl
  4. Доступ с внешнего ip не работает, соответственно. ws "engine" переписывает URL, используя локальный ip, а не внешний external.domain.de:8070/mywebservice?wsdl

Для external.domain все URL в wsdl переписываются на локальный ip Для xsdschemaLocation и мыло: адрес местоположения

Может ли проблема с прокси-сервером? Запрос через прокси заставляет веб-сервис думать, что это локальный доступ, а не внешний.

Как я могу предотвратить такое поведение на стороне сервера? Изменения в web.xml или sun.jax (Изменения на стороне клиента, к сожалению, невозможны)

1 Ответ

1 голос
/ 22 сентября 2011

Это классическая проблема при доступе к веб-сервисам через внешние прокси.

Чтобы это работало правильно, вам нужно сделать следующее

1) Добавьте еще один коннектор HTTP в server.xml вашего Tomcat. Скажем, на порту 8071, просто скопируйте 8080 Connector Dfn. и установите порт на 8071.

2) И в определении этого Соединителя. Вы должны добавить внешний IP и порт как proxyHost и proxyPort.

т.е. ваш server.xml должен содержать еще одну запись Connector, примерно такую, как эта

<Connector port="8071" protocol="HTTP/1.1"
   connectionTimeout="20000"
   redirectPort="8443"
   proxyHost="external.domain.de" proxyPort="8070" />

И убедитесь, что Соединения с external.domain.de через порт 8070 перенаправляются на 192.168.1.20 и порт 8071 вместо 8070.

Я сказал вам настроить новый соединитель, предполагая, что вы захотите получить доступ к WS как внутри, так и снаружи. Таким образом, соединитель внутреннего порта на 8070 не использует proxyhost и не меняет имя хоста для внутренних запросов, но любые запросы, поступающие из внешних источников через external.domain.de через порт 8071, получат external.domain.de в качестве имени хоста и 8070 как порт.

Если ваш WS будет доступен только с внешних клиентов, то вам не нужны 2 соединителя, просто добавьте директивы proxyHost и proxyPort к соединителю 8070, и все готово. Но имейте в виду, что даже внутренние запросы теперь будут видеть имя хоста как external.domain.de.

Подробнее @ https://tomcat.apache.org/tomcat-5.5-doc/config/http.html#Proxy_Support

...