java - 通过 CXF 配置基于 SSL 的 JAX-WS

标签 java ssl jax-ws cxf

嘿,我只是有一些相关的问题。最近生成客户端的外部 SOAP 接口(interface)更改为 https 接口(interface)。我手头有一个旧代码库,它通过 cxf 和不安全的、基于 http://的 wsdl 生成 java 文件。我改变了uri,在maven方面一切正常,即使是测试通过。但是当我在我的主要项目中使用这个 jar 时,我得到了这个:

Caused by: java.lang.NoSuchMethodError: javax.net.ssl.HttpsURLConnection.getSSLSocketFactory()Ljavax/net/ssl/SSLSocketFactory;
        at sun.net.www.protocol.https.DelegateHttpsURLConnection.getSSLSocketFactory(DelegateHttpsURLConnection.java:50)
        at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(AbstractDelegateHttpsURLConnection.java:172)
        at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:801)
        at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:158)
        at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1049)
        at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:234)
        at java.net.URL.openStream(URL.java:1010)
        at org.apache.cxf.resource.URIResolver.tryFileSystem(URIResolver.java:169)
        at org.apache.cxf.resource.URIResolver.resolve(URIResolver.java:119)
        at org.apache.cxf.resource.ExtendedURIResolver.resolve(ExtendedURIResolver.java:41)
        at org.apache.cxf.transport.TransportURIResolver.resolve(TransportURIResolver.java:134)
        at org.apache.cxf.catalog.CatalogWSDLLocator.getBaseInputSource(CatalogWSDLLocator.java:72)
        at org.apache.cxf.wsdl11.AbstractWrapperWSDLLocator.getBaseInputSource(AbstractWrapperWSDLLocator.java:57)
        at org.apache.cxf.wsdl11.WSDLManagerImpl.loadDefinition(WSDLManagerImpl.java:214)
        at org.apache.cxf.wsdl11.WSDLManagerImpl.getDefinition(WSDLManagerImpl.java:179)
        at org.apache.cxf.wsdl11.WSDLServiceFactory.(WSDLServiceFactory.java:91)
        at org.apache.cxf.jaxws.ServiceImpl.initializePorts(ServiceImpl.java:207)
        at org.apache.cxf.jaxws.ServiceImpl.(ServiceImpl.java:150)
        at org.apache.cxf.jaxws.spi.ProviderImpl.createServiceDelegate(ProviderImpl.java:63)
        at javax.xml.ws.Service.(Service.java:56)
        at generated.webservices.com.gbm.sso.ssoclient.AuthenticationServiceInternal.(AuthenticationServiceInternal.java:49)
        at com.gbm.caprice.sso.client.CachingSSOClient.init(CachingSSOClient.java:42)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1536)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1477)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1409)
        ... 45 more

你能帮忙吗?

最佳答案

由于您遇到了 NoSuchMethodError(由编译器捕获/抛出),我的建议是您使用的是 Java 类的一个版本(在本例中为 javax.net.ssl.HttpsURLConnection) 没有以下方法签名:

javax.net.ssl.HttpsURLConnection.getSSLSocketFactory()

这个类可以在 JRE/lib jsse.jar 中找到(自撰写本文时起,JDK 1.6.0_21)。确保您的 java 库和 Apache CXF 库已在 java CLASSPATH 中声明。

根据您的引起的异常,这就是我可以帮助您的。

关于java - 通过 CXF 配置基于 SSL 的 JAX-WS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3665509/

相关文章:

java - 如何在selenium服务器上提供自定义功能?

android - 在没有 Root 或警告的情况下在 Android 上安装 Trust Bundle 证书

java - 学习 Java Web 服务细节的资源?

java - 具有多个属性的 Jax-ws Enum

java - 如何让 JAXWS 在 SOAP 响应上发送内容长度 header

java - 如何避免此类中刷新 token 的重复代码?

java - Spring Boot Actuator Endpoints 安全性不适用于自定义 Spring 安全配置

java - 对内部有可比较对象的不可比较对象使用优先级队列

apache - 如何使 mod_ssl 接受自签名证书

amazon-web-services - https - 如何让用户通过 ELB 与 Jenkins 建立安全连接?