10

我有一个使用来自 WSDL 的 wsimport 生成的 web 服务实现。此服务部署在 Spring webapp 中的 Tomcat 服务器中。spring的配置文件(只有webservice部分)是这样的

<wss:binding url="/fooService">
    <wss:service>
        <ws:service bean="#fooService">
    </wss:service>
</wss:binding>

当我在 tomcat 中部署这个 webapp 时,如果我去,我可以获得 WSDL

http://localhost:8080/foo/fooService?wsdl 

wsdl soap:address 属性是这样的:

<service name="FooService">
    <port name="FooService" binding="tns:FooServiceBinding">
        <soap:address location="http://localhost:8080/foo/fooService"/>
    </port>
</service>

现在,一切都好。

问题是在生产中,我们有一个 Apache Web 服务器,这个服务器将请求重定向到 Tomcat。它也可以,但是当我们获得 WSDL 时,soap:address 仍然是 localhost:8080,我们需要将它作为 Web 服务的公共 url。

有任何想法吗?

非常感谢你。

4

1 回答 1

9

好吧,我找到了一种解决方案:

似乎 JAX-WS 会自动生成此属性。我发现其他 web 服务框架实现允许用户通过硬编码属性中的 url 来更改它,但似乎 JAX-WS 没有。有人知道有什么办法吗?

无论如何,我找到了一种解决方法:在 tomcat 连接器配置中使用 proxyName 和 proxyPort 属性,您可以告诉 Tomcat 在代理后面(在我们的例子中是 Apache 服务器)并且客户端的“真实”端口是 80。

进行此更改后,自动生成的 soap:address 将包含正确的值。

参考:

于 2012-11-27T16:48:28.677 回答