[英]Issues with Apache HTTP Client and logging
In my Tapestry application, I need to do a GET request to a certain URL at some point. 在我的Tapestry应用程序中,我有时需要对某个URL进行GET请求。 I do it like this (using Apache's HttpClient 4.2.1)
我这样做(使用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);
When I deploy my WAR on Glassfish (3.1.2.2) and the code in question is executed, the following exception is thrown: 当我在Glassfish(3.1.2.2)上部署WAR并执行有问题的代码时,会引发以下异常:
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)
I specify this in my pom.xml 我在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>
And I checked and made sure the Class that is "not being found" is actually in WEB-INF/lib/log4j-1.2.14. 我检查并确保“找不到”类实际上在WEB-INF / lib / log4j-1.2.14中。
Is there any way to solve this issue? 有什么办法解决这个问题?
You have a classloader problem. 您有一个类加载器问题。 Maybe another web application, that uses different log4j version, is loaded first.
也许首先加载使用不同log4j版本的另一个Web应用程序。 The classloader uses the first version of the class it finds.
类加载器使用找到的类的第一个版本。 Try this:
尝试这个:
Try to install and start your application. 尝试安装并启动您的应用程序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.