【问题标题】:Web Service - Tomcat - Behind proxy - wsdl locationWeb 服务 - Tomcat - 代理背后 - wsdl 位置
【发布时间】:2012-12-04 21:06:05
【问题描述】:

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

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

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

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

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

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

请问有什么办法可以解决这个问题吗?谢谢。

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

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

【问题讨论】:

    标签: java web-services apache proxy


    【解决方案1】:

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

    启用后,此选项将从传入的 Host: 行 向代理主机发出请求,而不是在 代理通行证

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

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

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

    【讨论】:

    • 非常感谢 A.J.为了快速响应。这就像一个魅力!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-11
    • 2012-06-15
    • 1970-01-01
    • 1970-01-01
    • 2015-11-23
    相关资源
    最近更新 更多