【问题标题】:jax-ws webservice's endpoint is always localhostjax-ws webservice 的端点总是 localhost
【发布时间】:2011-09-19 09:09:22
【问题描述】:

我真的需要你的帮助。我读到 jax-ws webservice 的 wsdl 将为每个请求动态生成。这样,soap端点之类的地址就会被调整为请求的url。

就我而言,无论是内部请求还是外部请求,地址总是引用 localhost:8080。

有人知道我该如何处理这个问题吗?

提前致谢


也许我没有很好地描述我的问题。

  1. 我有一个用 jax-ws 创建的 ws
  2. 它部署在 5.5.17 的 tomcat 服务器上
  3. 使用本地 ip 访问可以正常工作http://192.168.1.20:8070/mywebservice?wsdl
  4. 使用外部 ip 访问不工作。 ws“引擎”使用本地ip而不是外部ip重写url external.domain.de:8070/mywebservice?wsdl

对于 external.domain,wsdl 中的所有 url 都被重写为本地 ip 到 xsdschemaLocation 和 soap:address 位置

代理服务器有问题吗?通过代理的请求使 webservice 认为它是本地访问而不是外部访问。

如何在服务器端防止这种行为?更改 web.xml 或 sun.jax(很遗憾,客户端无法更改)

【问题讨论】:

  • How to change webservice url endpoint? 的可能重复项 - 我们有一个很好的答案
  • 链接线程中的两个解决方案使用硬编码的 URL。那不是很整洁。为了在其他服务器上部署,每次都必须编辑和重新编译源代码。是否没有选项可以在 web.xml 或 sun-jaxws.xml 中设置端点 url?那太棒了。

标签: java jax-ws


【解决方案1】:

这是通过外部代理访问网络服务时的经典问题。

要使其正常工作,您必须执行以下操作

1) 在 Tomcat 的 server.xml 中添加另一个 HTTP 连接器。假设在端口 8071 上,只需复制 8080 连接器 Dfn。并将端口设置为 8071。

2) 在那个连接器的定义中。您必须将外部 IP 和端口添加为 proxyHost 和 proxyPort。

即你的 server.xml 应该包含一个类似这样的连接器条目

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

并确保连接到端口 8070 上的 external.domain.de 被转发到 192.168.1.20 和端口 8071,而不是 8070。

我告诉过你设置一个新的连接器,假设你想在内部和外部访问 WS。这样 8070 上的内部端口连接器不使用 proxyhost 并更改内部请求的主机名,但是任何来自外部源的请求通过端口 8071 上的 external.domain.de 将获取 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

【讨论】:

  • 很棒的家伙。这就是我需要的答案。感谢您的详细解释。
猜你喜欢
  • 2015-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-04
  • 1970-01-01
  • 2012-01-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多