我有一个Java webservice在我们的内部环境中运行,它在Tomcat上。假设wsdl是:
为了让外部网络可以访问这个Web服务,我们使用另一台服务器上的Apache创建了一个代理,并使用ProxyPass实现类似以下的操作。
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");