Web服务 - Tomcat - 代理后 - wsdl文件位置

3
我有一个Java webservice在我们的内部环境中运行,它在Tomcat上。假设wsdl是:
http://actual:8080/app/temp?wsdl

为了让外部网络可以访问这个Web服务,我们使用另一台服务器上的Apache创建了一个代理,并使用ProxyPass实现类似以下的操作。
ProxyPass /app/temp http://actual:8080/app/temp

当我们通过http访问代理/应用程序/临时文件时,它会被正确地重定向到actual:8080/app/temp。因此,在这方面没有问题,我也可以访问wsdl。

但是WSDL引用了“实际”服务器的端口作为“webservice location”,这会导致从客户端对webservice方法进行实际调用时出现故障。

请问有什么解决办法吗?谢谢。

注意:客户端是使用Metro生成的。我找到了一种方法,可以使用以下代码强制在客户端中使用不同的终端节点。但是,我更希望能够提供一个纯代理解决方案,而不是要求使用我们的webservice的开发人员修改他们的代码。

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

4
您可以使用ProxyPreserveHost指令。引用自该链接中指令部分的内容:

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

因此,您应该在配置文件中添加以下内容:
ProxyPreserveHost On
ProxyPass /app/temp http://actual:8080/app/temp

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


1
非常感谢A.J.的快速回复。那个方法非常有效! - Arav Vijay

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接