我在内部环境中运行Tomcat上的Java Web服务。假设wsdl是
http://actual:8080/app/temp?wsdl
为了从网络外部提供对此Web服务的访问,我们在另一台服务器上使用Apache创建了一个代理,并使用ProxyPass执行类似
的操作ProxyPass /app/temp http://actual:8080/app/temp
外部当我们通过http访问proxy / app / temp时,它会被转移到实际:8080 / app / temp就好了。所以没有问题,我也可以访问wsdl。
但是WSDL引用了端口上“webservice location”的“实际”服务器。当从客户端对webservice方法进行实际调用时,这会导致失败。
关于如何解决这个问题的任何想法,好吗?感谢。
注意:客户端是使用Metro生成的。我找到了一种方法,使用如下代码强制客户端中的不同端点。但我正在寻找更多我们可以做的纯代理解决方案,而不是开发人员使用我们的Web服务必须触摸他们的代码。
((BindingProvider)port).getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "http://proxy/app/temp?wsdl");
答案 0 :(得分:4)
您可以使用ProxyPreserveHost指令。引用链接中的指令部分:
启用后,此选项将从传入传递Host:行 请求代理主机,而不是在。中指定的主机名 ProxyPass行
因此,您应该在配置文件中包含以下内容:
ProxyPreserveHost On
ProxyPass /app/temp http://actual:8080/app/temp
然后重启apache服务器。 使用此选项,您无需更改与Web服务相关的代码或设置中的任何内容。