我使用org.apache.http.client从Tomcat 7调用POST。 相同的代码在我的开发机器上运行,但在我的服务器上失败。
我似乎是一个类加载器问题,但我仔细检查了所有的jar,并且他们的lib目录中有相同的jar。
java.lang.NoSuchMethodError: org.apache.http.entity.StringEntity.<init>(Ljava/lang/String;Lorg/apache/http/entity/ContentType;)V
org.apache.http.client.entity.UrlEncodedFormEntity.<init>(UrlEncodedFormEntity.java:61)
org.botlibre.util.Utils.httpPOST(Utils.java:424)
我使用了这些罐子,并且两个tomcats都使用相同的httpclient-4.2.5.jar和http jars。
我的开发机器有tomcat 7.0.50,服务器有7.0.68
CodeSource src = StringEntity.class.getProtectionDomain().getCodeSource();
if (src != null) {
System.out.println(src.getLocation());
}
Class klass = StringEntity.class;
URL location = klass.getResource('/' + klass.getName().replace('.', '/') + ".class");
System.out.println(location);
答案 0 :(得分:1)
好的,问题是我的其他一个lib jar中有另一个版本的httpclient类。出于某种原因,它使用相同的罐子在dev机器上工作,我猜它以不同的顺序拾取它们。
这是我调试它的方式。
Class klass = ContentType.class;
URL location = klass.getResource('/' + klass.getName().replace('.', '/') + ".class");
System.out.println(location);