我真的需要你的帮助。我读到每个请求都会动态生成jax-ws webservice的wsdl。这样,soap端点之类的地址将被调整为请求URL。
就我而言,无论是内部请求还是外部请求,地址始终都是指localhost:8080。
某人是否知道我该如何处理这个问题呢?
提前致谢
也许我没有很好地描述我的问题。
对于external.domain,wsdl中的所有url都被重写为本地ip 到xsdschemaLocation和soap:地址位置
代理服务器有问题吗?通过代理请求使Web服务认为它是本地访问而不是外部访问。
如何在服务器端防止此行为?web.xml或sun.jax中的更改(遗憾的是客户端更改)
答案 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