在我们的内部环境中,我有一个在 Tomcat 上运行的 Java 网络服务。假设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 引用了端口上的“webservice 位置”的“实际”服务器。当从客户端对 Web 服务方法进行实际调用时,这会导致失败。
请问有什么办法可以解决这个问题吗?谢谢。
注意:客户端是使用 Metro 生成的。我找到了一种使用如下代码强制客户端中的不同端点的方法。但我更多的是寻找我们可以做的纯代理解决方案,而不是使用我们的 web 服务的开发人员必须接触他们的代码。
((BindingProvider)port).getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "http://proxy/app/temp?wsdl");