java - 如何更改自动生成的 SOAP :address from a JAX-WS webservice WSDL deployed with Spring

标签 java web-services spring jax-ws

我有一个使用来自 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 服务的公共(public) url。

有什么想法吗?

非常感谢。

最佳答案

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

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

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

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

引用资料:

关于java - 如何更改自动生成的 SOAP :address from a JAX-WS webservice WSDL deployed with Spring,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13587869/

相关文章:

java - "Error creating bean with name"创建事务管理器时

java - Android studio 构建失败,dx.bat 错误

java - 使用 spring boot 测试抛出空指针异常

java - 如何加快 Camel 路线

c# - 同一应用内的服务看不到同一 session

java - 使用数据库@Entity 类进行 REST 公开?

java - 无法检索 ListView 之外的列

Java 迭代固定长度的数组并使用 Scanner 类获取值

java - 如何在java web服务中验证Windows用户?

c# - VS 2015 中的 Stackoverflow 异常但 VS2010 中的异常如何?