java.lang.VerifyError: Schlechte Typ auf Operanden-stack in der Methode com.Sonne.net.httpserver.spi.HttpServerProvider
Wurde ich geplagt von diesem problem und konnte einzugrenzen, um eine kleine Datei, die fehl werfen die java.lang.VerifyError
beim Aufruf von Ant mit fork
eingestellt false
im <java>
Aufgabe, aber gelingt wenn fork
eingestellt ist true
.
Die geschlossene Datei:
package foo;
import javax.xml.ws.Endpoint;
import javax.jws.WebService;
@WebService
class Hello {
public String sayHello() {
return "hello";
}
}
public class FooMain {
public static void main(String args[]) throws Exception {
Object implementor = new Hello();
String address = "http://localhost:9000/SoapContext/SoapPort";
Endpoint.publish(address, implementor);
}
}
Wenn Sie angerufen werden, mit Ant und fork
eingestellt false
es wirft:
[java] java.lang.VerifyError: Bad type on operand stack
[java] Exception Details:
[java] Location:
[java] com/sun/net/httpserver/spi/HttpServerProvider$1.run()Ljava/lang/Object; @27: invokestatic
[java] Reason:
[java] Type 'sun/net/httpserver/DefaultHttpServerProvider' (current frame, stack[0]) is not assignable to 'com/sun/net/httpserver/spi/HttpServerProvider'
[java] Current Frame:
[java] bci: @27
[java] flags: { }
[java] locals: { 'com/sun/net/httpserver/spi/HttpServerProvider$1' }
[java] stack: { 'sun/net/httpserver/DefaultHttpServerProvider' }
[java] Bytecode:
[java] 0000000: b800 2599 0007 b800 27b0 b800 2699 0007
[java] 0000010: b800 27b0 bb00 1a59 b700 2ab8 0028 57b8
[java] 0000020: 0027 b0
[java] Stackmap Table:
[java] same_frame(@10)
Wenn Sie angerufen werden, mit fork
eingestellt true
es gelingt. Die spezifische Ausnahme VerifyError
vor allem, wenn kombiniert mit "Bad type on operand stack
" Punkte zu einem compiler-bug aus, was ich gelesen habe, aber warum sollte es Erfolg haben oder scheitern, je nach fork
Attribut des <java>
Ant-task ist mir schleierhaft. Irgendwelche Gedanken? Ich bin mit Ubuntu 12.04
mit dem folgenden java-tools:
$ java -version
java version "1.7.0_40"
Java(TM) SE Runtime Environment (build 1.7.0_40-b43)
Java HotSpot(TM) Server VM (build 24.0-b56, mixed mode)
$ javac -version
javac 1.7.0_40
$ ant -version
Apache Ant(TM) version 1.8.2 compiled on December 3 2011
$ ant -diagnostics | grep java.vm
java.vm.version : 24.0-b56
java.vm.vendor : Oracle Corporation
java.vm.name : Java HotSpot(TM) Server VM
java.vm.specification.name : Java Virtual Machine Specification
java.vm.specification.vendor : Oracle Corporation
java.vm.specification.version : 1.7
java.vm.info : mixed mode
wichtiges update
Beim Aufruf von Ant mit fork
eingestellt false
ich habe auch explizit hinzufügen /usr/lib/jvm/jdk1.7.0/jre/lib/rt.jar
zu den CLASSPATH, um die zum auslösen des VerifyError
Ausnahme. Andernfalls schlägt es fehl, vor erreichen, dass Punkt mit:
javax.xml.ws.WebServiceException: Provider com.sun.xml.internal.ws.spi.ProviderImpl not found
Natürlich dass Sie rt.jar
im CLASSPATH ist mächtig seltsam vor allem, da es die rt.jar
des java
version, die ich verwende.
ant -diagnostics | grep java.vm
sagen?Dies ist sehr wahrscheinlich auf eine jar-Datei-mismatch oder so.
aktualisiert die post
InformationsquelleAutor Marcus Junius Brutus | 2013-09-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist wahrscheinlich aufgrund der Diskrepanz zwischen den java-Versionen, ich sehe, Sie laufen 1.7.0_40 und 1.7.0_24. Sicher JAVA_HOME gesetzt ist, um die 1.7.0_40 JDK vor der Berufung auf Ant. Siehe den folgenden Beitrag für weitere Informationen, wie zu tun. Wie ändere ich die JAVA_HOME für ant?
which javac
undwhich java
produzieren? Ist das Ziel ein symbolischer link? Wenn ja, dann wo macht es Sinn?Sie haben Recht, die Dose war von 1.8 und ich lief es mit 1,7
InformationsquelleAutor disrvptor
Gut, die meisten wahrscheinlich, es ist einfach ein compiler-Fehler, siehe http://bugs.java.com/bugdatabase/view_bug.do?bug_id=8006684
Nicht und es hängen wirklich von der Gabel Eigentum wie pro Ihre Beschreibung, die nur den Klassenpfad nicht.
InformationsquelleAutor user3603546
Wenn die Klasse geladen wird einige Prüfverfahren werden durchgeführt. Wenn byte-code erzeugt wurde mit Fehler classloader erhöhen könnte ein VerifyError.
Ich hatte das gleiche Problem. Um es zu lösen:
1.8.0_75
2.2
->3.2.4
das Problem gelöst.InformationsquelleAutor Azee