1

私の Tapestry アプリケーションでは、ある時点で特定の URL に対して GET 要求を行う必要があります。私はこのようにします(ApacheのHttpClient 4.2.1を使用)

String scheme = getScheme();
String host = getHost();
int port = getPort();
String path = getPath();
String paramKey = getParamKey();
String paramValue = getParamValue();

URIBuilder builder = new URIBuilder();
builder
    .setScheme(scheme)
    .setHost(host)
    .setPort(port)
    .setPath(path)
    .setParameter(paramKey, paramValue);

URI uri = builder.build();

HttpGet getRequest = new HttpGet(uri);
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpResponse response = httpClient.execute(getRequest);

WAR を Glassfish (3.1.2.2) にデプロイし、問題のコードを実行すると、次の例外がスローされます。

Caused by: org.apache.commons.logging.LogConfigurationException: org.apache.commons.logging.LogConfigurationException: No suitable Log constructor [Ljava.lang.Class;@78aded17 for org.apache.commons.logging.impl.Log4JLogger (Caused by java.lang.NoClassDefFoundError: org/apache/log4j/Category) (Caused by org.apache.commons.logging.LogConfigurationException: No suitable Log constructor [Ljava.lang.Class;@78aded17 for org.apache.commons.logging.impl.Log4JLogger (Caused by java.lang.NoClassDefFoundError: org/apache/log4j/Category))
    at org.apache.commons.logging.impl.LogFactoryImpl.newInstance(LogFactoryImpl.java:543)
    at org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:235)
    at org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:209)
    at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:351)
    at org.apache.http.impl.client.AbstractHttpClient.<init>(AbstractHttpClient.java:187)
    at org.apache.http.impl.client.DefaultHttpClient.<init>(DefaultHttpClient.java:146)

これを pom.xml で指定します

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

<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.14</version>
</dependency>

<dependency>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
    <version>1.1.1</version>
</dependency>

そして、「見つからない」クラスが実際にWEB-INF/lib/log4j-1.2.14にあることを確認しました。

この問題を解決する方法はありますか?

4

1 に答える 1

2

クラスローダに問題があります。異なる log4j バージョンを使用する別の Web アプリケーションが最初にロードされる可能性があります。クラスローダは、検出したクラスの最初のバージョンを使用します。これを試して:

  • アプリ サーバーから他のすべてのアプリケーションを削除する
  • サーバーのクラスパスに別の log4j がないことを確認してください。

アプリケーションをインストールして起動してみてください。

于 2013-12-20T10:10:46.843 に答える