2010-09-08 65 views
0

嘿,我只是有一些相关的问题。最近,生成客户端的外部SOAP接口更改为https一个。并且我手头有一个旧的代码库,它通过cxf和不安全的http://基于wsdl生成java文件。我chnaged uri,并在maven方面,即使通过测试,一切正常。但是当我在我的主要项目中使用这个罐子时,我得到这个:通过CXF配置JAX-WS over SSL通过CXF

 
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 

你能帮忙吗?

回答

0

既然你得到的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中声明。

这就是我可以帮助你根据你的caused例外。

+0

非常rightlty说。那是我所希望的。但是Apache CXF也是在classpath和jssee.jar中。但是,它仍然会给出这个错误。所以,我的猜测是它与Apache CXf覆盖有关(意味着提供了一个不同的HttpsURLConnection实现),更令人担忧的是如果它转到jsse.jar中的HttpsURLConnection(使用jdk 1.6.0_16),它具有该方法。奇怪! – 2010-09-09 03:36:10

+0

这是否意味着静态btw? – 2010-09-09 07:40:51

+0

不,该方法不是静态的,Apache CXF从未实现自己的HttpsURLConnection。如果JAVA库和CXF都在类路径中,我不知道他们为什么看不到对方。 – 2010-09-09 09:35:28