如何从使用Spring部署的JAX-WS Web服务WSDL更改自动生成的soap:地址

dru*_*lik 10 java spring web-services jax-ws

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

<wss:binding url="/fooService">
    <wss:service>
        <ws:service bean="#fooService">
    </wss:service>
</wss:binding>
Run Code Online (Sandbox Code Playgroud)

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

http://localhost:8080/foo/fooService?wsdl 
Run Code Online (Sandbox Code Playgroud)

和wsdl soap:address属性是这样的:

<service name="FooService">
    <port name="FooService" binding="tns:FooServiceBinding">
        <soap:address location="http://localhost:8080/foo/fooService"/>
    </port>
</service>
Run Code Online (Sandbox Code Playgroud)

而就目前而言,一切都好.

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

有任何想法吗?

非常感谢你.

dru*_*lik 9

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

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

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

执行此更改时,自动生成的soap:地址包含正确的值.

参考文献:

  • 我们的服务器也站在负载平衡器后面,我也遇到了将 http 更改为 https 的问题。毕竟我通过将三个值 `scheme="https" proxyName="host.com" proxyPort="443"` 添加到我的 Tomcat 的 server.xml 中解决了它。 (2认同)