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



我有一个Java Web服务在我们的内部环境中运行在Tomcat上。假设 wsdl 是

http://actual:8080/app/temp?wsdl

为了提供从网络外部对此 Web 服务的访问,我们在另一台服务器上使用 Apache 创建了一个代理,并使用 ProxyPass 执行类似操作

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

因此,在外部,当我们通过http访问proxy/app/temp时,它会被转移到actual:8080/app/temp。所以没有问题,我也可以访问 wsdl。

但是 WSDL 引用了端口上"Web 服务位置"的"实际"服务器。当从客户端对 Web 服务方法进行实际调用时,这会导致失败。

请问关于如何解决此问题的任何想法?谢谢。

注意:客户端是使用 Metro 生成的。我找到了一种使用如下所示的代码在客户端中强制使用不同端点的方法。但我正在寻找一个我们可以做的纯代理解决方案,而不是使用我们的 Web 服务的开发人员必须接触他们的代码。

((BindingProvider)port).getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "http://proxy/app/temp?wsdl");

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

启用后,此选项将从传入传递 Host: 行 请求代理主机,而不是 代理通过线

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

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

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

最新更新