BasicHttpContext

Generic1

Top Contributor
Hallo,

ich habe einen bestehenden WebService (Axis1.4) welcher einwandfrei funktioniert. Im Backend wird unter anderem httpclient-4.0.1.jar (die Klasse BasicHttpContext) verwendet.

Jetzt bin ich hergegangen und hab mir einen zweiten WebService gebaut (bzw. ich baue gerade den alten WebService um), welcher Axis2 verwendet und bekomme mit dem neuen WebService folgende Fehlermeldung:

Code:
org.apache.http.protocol.BasicHttpContext: method <init>()V not found

jetzt hab ich ein bisschen Recherchiert und hab herausgefunden, dass ich httpclient-4.1.jar verwenden soll - das kann ich aber nicht, da es sich beim Backend um ein Legacy- System handelt.

Meine Frage wäre jetzt, was ich da machen kann? Hat jemand eine Ahnung warum die Methode nicht gefunden wird, in der Klasse BasicHttpContext hat sich ja nichts geändert!?
lg
Generic

Das ist der StackTrace:

Java:
14:41:58,921 INFO  [STDOUT] [ERROR] org.apache.http.protocol.BasicHttpContext: method <init>()V not found
java.lang.reflect.InvocationTargetException
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.apache.axis2.rpc.receivers.RPCUtil.invokeServiceClass(RPCUtil.java:194)
	at org.apache.axis2.rpc.receivers.RPCMessageReceiver.invokeBusinessLogic(RPCMessageReceiver.java:102)
	at org.apache.axis2.receivers.AbstractInOutMessageReceiver.invokeBusinessLogic(AbstractInOutMessageReceiver.java:40)
	at org.apache.axis2.receivers.AbstractMessageReceiver.receive(AbstractMessageReceiver.java:100)
	at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:176)
	at org.apache.axis2.transport.http.HTTPTransportUtils.processHTTPPostRequest(HTTPTransportUtils.java:275)
	at org.apache.axis2.transport.http.AxisServlet.doPost(AxisServlet.java:131)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
 
Zuletzt bearbeitet:

Generic1

Top Contributor
Ich habs befürchtet, dass das Problem eher wenig verbreitet ist.
Weiß jemand, ob es möglich ist, einen WebService mit Axis 1.4 und einen mit Axis 2 in einem Projekt zu haben?
lg
 

Generic1

Top Contributor
Also ich bin jetzt draufgekommen, das sich 2 BasicHttpContext in meinem Classpath befinden, eine in httpclient-4.0.1.jar und eine andere in den Jar's von Axis2.
Die Frage ist jetzt, wie kann ich es machen, dass bei 2 vorkommenden Klassen die Richtige verwendet wird?
Weiß da jemand wie man das machen kann, ich kann ja in den JAR's von Axis2 nicht einfach das *.class- File löschen.
Gibts da irgendwelche Priorities?

lg
Generic
 

Generic1

Top Contributor
OK, ich hab mir jetzt das durchgelesen:

http://www.java-forum.org/allgemeine-java-themen/63864-gleiche-klasse-mehreren-jar-files.html

Schaut schlecht aus für mich, ich habe 2 Klassen mit dem selben Namen und den selben Packagenamen in meinem Classpath. Noch dazu sind das extern runtergeladenen Jar's und die Klassen haben zwar den selben Namen, haben aber eine unterschiedliche Version - schlimmer gehts ja gar nicht mehr.

Meine Idee wäre jetzt, dass ich statt der Klasse, die 2 mal vorkommt den Code der Klasse mit der richtigen Version in eine eigene Klasse kopiere mit einem unique- Namen. Wäre das eine Möglichkeit?
 
M

maki

Gast
Mit OSGi wäre das kein Problem gewesen ;)

Kannst du den Classpath "steuern"?
Dann wäre es einen Vesuch wert die Reihenfolge der externen Libs umzudrehen, die HttpClient verwenden.
 

Generic1

Top Contributor
Ja, ich arbeite da mit einer Applikation, welche schon existiert hat, und ich mach da was dazu.
Aber ich hab mit OSGi schon gearbeitet und mir ist schon klar, dass jedes Bundle bei OSGi einen eigenen Classpath hat -> aber leider ist das bei mir nicht der Fall :-(

Mit OSGi wäre das kein Problem gewesen ;)

Kannst du den Classpath "steuern"?
Dann wäre es einen Vesuch wert die Reihenfolge der externen Libs umzudrehen, die HttpClient verwenden.


Wie könnte ich das in Eclipse machen? Ich hab eine Applikation, bei der es mehrere Einzelprojekte gibt und ich hab eben in zwei verschiedenen Projekten eben die je eine jar drinnen und diese Projekte haben Abhängigkeiten (in Projekt -> Properties -> Java Build Path -> Projects).

Was hältst du eigentlich von dem, dass ich den Code der Klasse BasicHttpContext kopiere und umbenenne?
 
Zuletzt bearbeitet:
M

maki

Gast
Was hältst du eigentlich von dem, dass ich den Code der Klasse BasicHttpContext kopiere und umbenenne?
Das nutzt dir doch rein gar nichts, da beide Abhängigkeiten transitiv sind.

Anscheinend kann man eben Axis 1.4 und Axis 2 nicht mischen.
 

Generic1

Top Contributor
naja mit Axis 1.4 hat das nichts zu tun, ich verwende einen WebService, der Axis2 verwendet und dann wird in einem Projekt noch httpcore-1.4 verwendet - das ist aber kein WebService.

OK, it transitiv meinst du wahrscheinlich, wenn ich eine eigene Klasse mache und diese von einer Klasse in einer JAR ableite, dann lädt der Classloader wieder irgendeine Basis- Klasse von den beiden JAR's?!

Gibts es dafür keinen Workaround? Das ist ja sicher nicht das erste mal dass das passiert?!
lg
 

Neue Themen


Oben