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