jax-ws webservice的端点始终是localhost

时间:2011-09-19 09:09:22

标签: java jax-ws

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

就我而言,无论是内部请求还是外部请求,地址始终都是指localhost:8080。

某人是否知道我该如何处理这个问题呢?

提前致谢


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

  1. 我用jax-ws创建了一个ws
  2. 它部署在tomcat服务器5.5.17
  3. 使用本地IP访问工作正常http://192.168.1.20:8070/mywebservice?wsdl
  4. 使用外部IP访问不起作用。 ws“引擎”使用本地ip而不是外部ip重写url external.domain.de:8070/mywebservice?wsdl
  5. 对于external.domain,wsdl中的所有url都被重写为本地ip 到xsdschemaLocation和soap:地址位置

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

    如何在服务器端防止此行为?web.xml或sun.jax中的更改(遗憾的是客户端更改)

1 个答案:

答案 0 :(得分:1)

通过外部代理访问Web服务时,这是一个典型问题。

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

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