【问题标题】:Wildfly 8.1 ClassNotFound org.apache.http.conn.ClientConnectionManagerWildfly 8.1 ClassNotFound org.apache.http.conn.ClientConnectionManager
【发布时间】:2014-12-17 03:16:32
【问题描述】:

我正忙着让池连接管理器为 Resteasy 客户端工作。 在 Wildfly 8.1 上部署。

import org.apache.http.client.HttpClient;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.conn.PoolingClientConnectionManager;
import org.jboss.resteasy.client.jaxrs.ResteasyClient;
import org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder;
import org.jboss.resteasy.client.jaxrs.engines.ApacheHttpClient4Engine;
...

PoolingClientConnectionManager cm = new PoolingClientConnectionManager();
cm.setMaxTotal(200);
cm.setDefaultMaxPerRoute(20);
HttpClient httpClient = new DefaultHttpClient(cm);
ApacheHttpClient4Engine engine = new ApacheHttpClient4Engine(httpClient);
ResteasyClient resteasyClient = new ResteasyClientBuilder().httpEngine(engine).build();

我收到了错误:

19:04:59,355 ERROR [org.jboss.as.controller.management-operation] (Controller Boot Thread) JBAS014613: Operation ("deploy") failed - address: ([("deployment" => "ESM2.war")]) - failure description: {"JBAS014671: Failed services" => {"jboss.deployment.unit.\"ESM2.war\".POST_MODULE" => "org.jboss.msc.service.StartException in service jboss.deployment.unit.\"ESM2.war\".POST_MODULE: JBAS018733: Failed to process phase POST_MODULE of deployment \"ESM2.war\"
Caused by: java.lang.RuntimeException: JBAS018757: Error getting reflective information for class com.xxx.esm2.server.webservices.rest.arcgis.ClientBean with ClassLoader ModuleClassLoader for Module \"deployment.ESM2.war:main\" from Service Module Loader
Caused by: java.lang.NoClassDefFoundError: org/apache/http/conn/ClientConnectionManager
Caused by: java.lang.ClassNotFoundException: org.apache.http.conn.ClientConnectionManager from [Module \"deployment.ESM2.war:main\" from Service Module Loader]"}}

这是来自 POM 的条目:

    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.2.1</version>
        <scope>provided</scope>
    </dependency>

jar 已经在 Wildfly 模块目录中,因此提供了范围。

如何为 Resteasy 客户端正确添加和配置池连接管理器?

【问题讨论】:

    标签: java httpclient classnotfoundexception wildfly


    【解决方案1】:

    modules 目录中的 jars 对你来说大多是屏蔽的,并且是为了服务器实现的使用而存在的。公开 Java EE API 的例外。

    对您来说最简单的解决方案是在您的应用程序中包含这个 jar。

    或者,您可以编写一个 jboss-deployment-structure.xml 文件,如 Class Loading in WildFly 中所述。

    例如:

    <?xml version="1.0" encoding="UTF-8"?>
    <jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
        <deployment>
            <dependencies>
                <module name="org.apache.httpcomponents"/>
            </dependencies>
        </deployment>
    </jboss-deployment-structure>
    

    【讨论】:

    • 我最终做的是将Dependencies: org.apache.httpcomponents 添加到清单文件中。我仍然无法弄清楚为什么 WildFly modules/modules/base 目录中的一些 jar 被加载而有些没有。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-29
    • 2014-09-18
    • 2020-12-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多