2010-09-08 39 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