jax-ws webservice的端点始终是localhost

我真的需要你的帮助。 我读到每个请求都会动态生成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重写url而不是外部ip.domain.de:8070/mywebservice?wsdl

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

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

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

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

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

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

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

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

 

并确保在端口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