2016-04-25 6 views
0

Ich benutze die org.apache.http.client, um einen POST von Tomcat 7 anzurufen. Derselbe Code funktioniert auf meinem Dev-Rechner, aber scheitert an mein Server.HttpClient funktioniert nicht auf Tomcat, NoSuchMethodError org/apache/http/entity/ContentType

Ich scheint ein Classloader-Problem zu sein, aber ich habe alle Gläser überprüft, und sie haben die gleichen Gläser in ihrem Lib-Verzeichnis.

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) 

Ich warf die Gläser verwenden, und beide tomcats den gleichen Httpclient-4.2.5.jar verwenden und http Gläser.

Meine dev Maschine hat tomcat 7.0.50 und der Server 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

Klingt wie ein Abhängigkeitskonflikt, vielleicht haben Sie ein Duplikat jar mit verschiedenen Versionen, stellen Sie sicher, dass alle Ihre HttpClient-Bibliotheken von der gleichen Version sind und keine Duplikate haben. – vzamanillo

Antwort

1

Ok, das Problem war eine meiner anderen lib Gläser hatte eine andere Version der Httpclient-Klassen in seinem Inneren. Aus irgendeinem Grund funktionierte es auf der Dev-Maschine mit den gleichen Gläsern, ich nehme an, dass es in einer anderen Reihenfolge aufgenommen wurde.

Dies ist, wie ich es debuggte.

Verwandte Themen