2015-12-01 7 views
2

Я использую отдых легко для получения и публикации данных с стороннего URL-адреса, когда я звоню в get сервис, используя приведенный ниже код я получаю ClassNotFoundException «javax.net.ssl.SSLSocketFactory»java.lang.ClassNotFoundException: javax.net.ssl.SSLSocketFactory При использовании остального легко с JAVA 8 на WildFly8.2.0

final ClientRequest request = createRequest(url,acceptType,consumesType,body); 
final byte[] encodedCredentials = (userName + ":" + password) 
      .getBytes(); 
    final String encodedAuto = Base64.encodeBytes(encodedCredentials); 
    request.header("Authorization", "Basic " + encodedAuto); 
try { 
     request.addAuthenticationHeaders(request, userName, 
       password); 
     response = request.get(String.class); 
     if (response != null) { 
      logger.info("Status of the REST Call:" 
        + response.getStatus()); 
     } 
    } catch (final Exception e) { 
     e.printStackTrace(); 
     logger.error("Failed the get the data from PM", e); 
    } 

И метод createRequest как ниже

public ClientRequest createRequest(final String urlString, 
     final String acceptType, final String consumesType, 
     final String body) { 
    final ClientRequest request = new ClientRequest(urlString); 
    request.accept(acceptType); 
    if (body != null) { 
     request.body(consumesType, body); 
    } 
    request.header("Content-Type", consumesType); 
    // request.header("Accept", acceptType); 

    return request; 
} 

Когда он выполняется ответ = request.GET (запрос); он бросает SSLSocketFactory ClassNotFoundException, согласно моему анализу этот класс доступен на rt.jar, который не требуется добавлять в папку WildFly или в папку lib развертываний.

Caused by: java.lang.NoClassDefFoundError: javax/net/ssl/SSLSocketFactory 
at org.apache.commons.httpclient.protocol.SSLProtocolSocketFactory.createSocket(SSLProtocolSocketFactory.java:82) [commons-httpclient-3.1.jar:] 
at org.apache.commons.httpclient.protocol.SSLProtocolSocketFactory.createSocket(SSLProtocolSocketFactory.java:127) [commons-httpclient-3.1.jar:] 
at org.apache.commons.httpclient.HttpConnection.open(HttpConnection.java:707) [commons-httpclient-3.1.jar:] 
at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:387) [commons-httpclient-3.1.jar:] 
at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171) [commons-httpclient-3.1.jar:] 
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397) [commons-httpclient-3.1.jar:] 
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:323) [commons-httpclient-3.1.jar:] 
at org.jboss.resteasy.client.core.executors.ApacheHttpClientExecutor.execute(ApacheHttpClientExecutor.java:81) [resteasy-jaxrs-2.2.1.GA.jar:] 
at org.jboss.resteasy.core.interception.ClientExecutionContextImpl.proceed(ClientExecutionContextImpl.java:39) [resteasy-jaxrs-2.2.1.GA.jar:] 
at org.jboss.resteasy.security.doseta.DigitalSigningInterceptor.execute(DigitalSigningInterceptor.java:107) [resteasy-crypto-3.0.10.Final.jar:] 
at org.jboss.resteasy.core.interception.ClientExecutionContextImpl.proceed(ClientExecutionContextImpl.java:45) [resteasy-jaxrs-2.2.1.GA.jar:] 
at org.jboss.resteasy.plugins.interceptors.encoding.AcceptEncodingGZIPInterceptor.execute(AcceptEncodingGZIPInterceptor.java:40) [resteasy-jaxrs-2.2.1.GA.jar:] 
at org.jboss.resteasy.core.interception.ClientExecutionContextImpl.proceed(ClientExecutionContextImpl.java:45) [resteasy-jaxrs-2.2.1.GA.jar:] 
at org.jboss.resteasy.client.ClientRequest.execute(ClientRequest.java:473) [resteasy-jaxrs-2.2.1.GA.jar:] 
at org.jboss.resteasy.client.ClientRequest.httpMethod(ClientRequest.java:704) [resteasy-jaxrs-2.2.1.GA.jar:] 
at org.jboss.resteasy.client.ClientRequest.get(ClientRequest.java:509) [resteasy-jaxrs-2.2.1.GA.jar:] 
at org.jboss.resteasy.client.ClientRequest.get(ClientRequest.java:537) [resteasy-jaxrs-2.2.1.GA.jar:] 
at com.example.main.framework.service.RestClientService.get(RestClientService.java:46) [main-ejb.jar:] 
at com.example.main.entity.validator.EntityValidator.getPMAccountDetails(EntityValidator.java:2866) [main-ejb.jar:] 
at com.example.main.entity.validator.EntityValidator.validateCompanySettingPortfolioMgr(EntityValidator.java:2633) [main-ejb.jar:] 
at com.example.main.action.codegen.CompanySettingPortfolioMgrHome.persist(CompanySettingPortfolioMgrHome.java:329) [main-ejb.jar:] 
... 99 more 
Caused by: java.lang.ClassNotFoundException: javax.net.ssl.SSLSocketFactory from [Module "org.apache.commons.httpclient:main" from local module loader @6043cd28 (finder: local module finder @cb51256 (roots: D:\wildfly-8.2.0.Final\modules,D:\wildfly-8.2.0.Final\modules\system\layers\base))] 
at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:213) [jboss-modules.jar:1.3.3.Final] 
at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:459) [jboss-modules.jar:1.3.3.Final] 
at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:408) [jboss-modules.jar:1.3.3.Final] 
at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:389) [jboss-modules.jar:1.3.3.Final] 
at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:134) [jboss-modules.jar:1.3.3.Final] 
... 120 more 

Если мы добавим к rt.jar wildfly модуля затем он бросает ClassNotFoundException связанным с классами в jsse.jar, которая является частью пакета JDK 1.8 Lib. Затем я понял, что мы не должны добавлять эти банки ни к модулю httpclient, ни к папке развертывания lib.

Сообщите мне, если у кого есть решение по этой проблеме.

ответ

3

Проблема была решена после добавления зависимости javax.api к модулю.xml для модуля org.apache.commons.httpclient.

<module ...> 

    <resources> 
     ... 
    </resources> 

    <dependencies> 
     .... 
     <module name="javax.api"/> 
    </dependencies> 
</module> 
+0

Это отлично сработало для меня с вопросом о PostgreSQL 10 в Wildfly 10.1.0. Вместо добавления зависимостей к httpclient я сделал это для модуля postgres. –