Web服务 - Tomcat - 代理后面 - wsdl位置

时间:2012-12-04 21:06:05

标签: java web-services apache proxy

我在内部环境中运行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");

1 个答案:

答案 0 :(得分:4)

您可以使用ProxyPreserveHost指令。引用链接中的指令部分:

  

启用后,此选项将从传入传递Host:行   请求代理主机,而不是在。中指定的主机名   ProxyPass行

因此,您应该在配置文件中包含以下内容:

ProxyPreserveHost On
ProxyPass /app/temp http://actual:8080/app/temp

然后重启apache服务器。 使用此选项,您无需更改与Web服务相关的代码或设置中的任何内容。