2016-04-25 5 views
0

org.apache.http.clientを使用してTomcat 7からPOSTを呼び出す。 同じコードが自分のマシンで動作するが失敗する私のサーバー。HttpClientがTomcatで動作していない、NoSuchMethodError org/apache/http/entity/ContentType

私はクラスローダーの問題のようですが、私はすべての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) 

Iは使用jarファイルをダンプし、そして両方のTOMCATSが同じにHTTPClient-4.2.5.jarを使用して、およびHTTPジャーれます。

私のdevのマシンは、Tomcat 7.0.50を持っており、サーバが内部のHTTPClientクラスの別のバージョンを持っていた、問題は私の他のlibにjarファイルの一つであった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

異なるバージョンの重複したjarファイルがある可能性があります。すべてのHttpClientライブラリが同じバージョンのもので、重複していないことを確認してください。 – vzamanillo

答えて

1

[OK]を持っています。何らかの理由で、同じjarを持つdevマシン上で動作しましたが、別の順序でそれらを選んだと思います。

これは私がそれをデバッグした方法です。

Class klass = ContentType.class; 
URL location = klass.getResource('/' + klass.getName().replace('.', '/') + ".class"); 
System.out.println(location);