我们有一个简单的jax-ws SOAP服务器,由Apache CXF 3.2.6支持,采用独立(自托管)模式,使用嵌入式Jetty。服务器是使用CXF的wsdl2java
以wsdl优先方式生成的。WSDL是类路径上的一个文件,并且该物理WSDL文件在soapbind:address
元素的location
属性中具有https://....
。
启动后,服务器将发布到http://0.0.0.0:8080
。服务器还位于路由https://external-name
-> SSL termination -> http://internal-name:8080
的SSL终端后面,因此外部服务及其WSDL可在https://external-name
上获得。
问题是,当通过https://external-name?wsdl
从部署的服务器请求WSDL时,CXF会将结果文件中soapbind:address
元素的location
属性更改为http://external-name
(将协议从HTTPS更改为HTTP,并保留其他所有内容),这会导致生成客户端代理、Soap等方面的问题。
最糟糕的是,我们的服务不能被我们的合作伙伴的SOA使用,它只强制使用WSDL中发布的位置。
除了删除SSL终端并让CXF自己处理SSL之外,我们如何解决这个问题?(这很可怕,因为Java密钥库维护很糟糕,而且必须在服务器实例中存储公司范围的证书+私钥)。
发布于 2018-08-30 03:32:20
您可以在配置中将所需地址设置为publishedEndpointUrl
。请参阅:http://cxf.apache.org/docs/jax-ws-configuration.html
https://stackoverflow.com/questions/52078544
复制相似问题