Servlet Tomcat Method Signature Resolution

_ebm_

Mitglied
Hi,

bevor ich zu meinem Problem komme, kurz über mich: Ich bin seit einigen Jahren Entwickler und beherrsche ein recht breites Spektrum an Sprachen. Java begleitet mich dabei schon die ganze Zeit. Meine Erfahrungen gehen über Code-Generierung, Classloader-Manipulation, Reflection, Spring, Hibernate, Tomcat usw. Nun zu meinem Problem:

In einer Applikation rufe ich eine statische Methode:
Java:
 public static <T extends Number> T getNumber(String str, Class<T> clazz, T value) {
    // simplified!!
    return value;
 }
mit:
Code:
Java:
 my.pkg.Helper.getNumber("foo", java.lang.Long.class, 1L );
Das funktioniert auch wunderbar

Wenn ich das jetzt in einem Tomcat mache, geht das nicht. Ich erhalte eine NoSuchMethod Exception, weil die VM eine Methode mit der Signatur "
Code:
Object getNumber(String, Class, Object)
" erwartet. Die gibt es ja nicht. Die Signatur nach dem Compilieren ist ja "
Code:
Number getNumber(String, Class, Number)
". Wenn ich also die Typangabe in der statischen Methode auf <T> abändere, geht es auch im Tomcat wieder, weil die Signatur dann wieder passt.

Wieso handhabt die VM das im Tomcat anders als in einer normalen Application? Oder anders: Wieso wird im Tomcat gleich auf Object zurückgeführt und nicht vorher noch auf Number?

Ich hoffe, mir kann einer helfen. Ich kann mir das Verhalten nicht erklären, da es ja eigentlich mit dem Generics-Standard bricht.

Viele Grüße
Carsten

PS. Wenn hier einer mitliest, der durch Zufall auch im MacUser Forum liest: Entschuldige den Cross-Post . Ich erhoffe mir hier inzwischen eher Hilfe.
 

fastjack

Top Contributor
Welche Version von Tomcat nutzt Du? Ist der Code in einem Servlet oder in einer JSP enthalten? Bei letzterem kann es sein, das der JSP-Compiler Generics nicht beachtet.
 

_ebm_

Mitglied
Hallo Fastjack,

sorry, die Version hab ich vergessen. Es handelt sich um einen Tomcat 7 (7.0.16).

Die aufrufende Stelle und die statische Methode liegen im Business-Code. JSPs sind nicht betroffen.

Alle mir bekannte Java-Compiler verwerfen übrigens grundsätzlich die Generic-Informationen. Es findet dahingehend zur Laufzeit keine Typprüfung mehr statt. Der Fehler tritt aber erst zur Laufzeit auf!

VG Carsten
 
M

maki

Gast
Hi

welche JVM nutzt Tomcat denn?
Welcher Compiler wurde verwendet? (Eclipse JDT, Oracle JDK, etc.)
 

_ebm_

Mitglied
Sorry,

Oracle JDK >= 1.6.0_26
Compiler sowohl Eclipse (3.7) als auch Oracle JDK
Gebaut mit Maven 3.0.3.

(Spring 3.0.5, Struts 1.3, JSTL... - sollte aber alles keine Rolle spielen, da es da nicht durch die Libs geht, kein Autowiring...)

Unter Windows 7 (32 Bit) und Linux (Ubuntu 11.10, 64 Bit).

Es ist alles relativ egal. Merkwürdig war auch, dass wir es zwischenzeitlich mal nicht nachstellen konnten. Es nach einem sauberen Build aber wieder da war.

:bahnhof:
 
Zuletzt bearbeitet:

fastjack

Top Contributor
Das weis ich auch ;) Im Fall von JSP-Seiten allerdings wird aus JSP zuerst Java-Code für ein Servlet gemacht. Einige Tomcat-Versionen haben da bereits die Generics plattgemacht, das führte dann auch zu solchen Effekten. Im Bytecode sind sie sowieso weg.

[edit]
Vielleicht baut jemand mit falschen javac-target? (also 1.4, 1.3 oder so...)
[/edit]
 
Zuletzt bearbeitet:
M

maki

Gast
Der Grund warum ich nach dem verwendeten Compiler fragte:
Das JDT, also der Eclipse Compiler, ist nicht 100% gleich wie der Java Compiler aus dem JDK, es gab/gibt die eine oder andere Interpretation von Generics im JDT inkl. Bugs.

Wenn du mit dem embedded Maven 3 in Eclipse baust, wird auch der Compiler aus dem JDT genommen.
Wenn du in der Kommandozeile baust, wird der JDK Compiler genommen (solange Maven nicht anders konfiguriert ist ;)).

Interessant wäre jetzt, ob der Bug nur mit dem Build aus der IDE (also embedded Maven + JDT Compiler) oder auch beim Build von der Kommandozeile (also "externes" Maven + JDK Compiler) auftritt.
 

_ebm_

Mitglied
Hallo,

Sorry, hab übers Wochenende keine Zeit gefunden, weiter zu forschen. Ein "From-Scratch" Projekt konnte das jetzt auch nicht reproduzieren. Es ist sehr mysteriös. Wir sind das jetzt umgangen und haben die Generics über Bord geworfen. Es gibt wieder für jeden unterstützten Typen eine Methode - der Sicherheit wegen, nicht dass uns das Produktivsystem mal um die Ohren fliegt.

Jedenfalls trat es sowohl mit dem Eclipse- als auch mit dem Oracle-JDK-Compiler auf.

Danke Euch für Eure Ratschläge und Zeit!

Viele Grüße
Carsten
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Tomcat Application Path bestimmen Allgemeines EE 0
TheWhiteShadow JSF plugins für tomcat webapp Allgemeines EE 0
X Tomcat checkParachute Allgemeines EE 3
C Servlet Tomcat/Jersey findet REST-Service nicht Allgemeines EE 3
J Global JNDI Tomcat Allgemeines EE 0
N WebService WAR-File auf Tomcat-Server Allgemeines EE 1
C WebSocket in Tomcat wirft 404 Allgemeines EE 0
S Eclipse mit Tomcat und Jersey Allgemeines EE 7
S Fehlersuche in Eclipse/Tomcat -> Error-log?? Allgemeines EE 2
S Tomcat und 404 -> von jetzt auf gleich Allgemeines EE 4
L JNDI auf Tomcat mit EE Allgemeines EE 4
J Logging und Monitoring unter Tomcat Allgemeines EE 2
aze Tomcat:Error Pages werden nicht angezeigt Allgemeines EE 4
D JSF JSF 2.0 + ICEFaces + Tomcat 7 Allgemeines EE 3
R Sessionmanagement und Tomcat Allgemeines EE 6
W Tomcat Support mit SLA? Allgemeines EE 3
P Tomcat lädt falsche Datei obwohl richtig angegeben Allgemeines EE 11
N Tomcat funktioniert nach shutdown/startup nicht mehr korrekt Allgemeines EE 9
B Tomcat, JNDI und datasource - Konfiguartion Allgemeines EE 2
JimPanse Tomcat Fehler nach redeploy Allgemeines EE 5
A Java Tomcat findet Website nicht Allgemeines EE 8
S Anfängerfrage Eclipse/Tomcat Allgemeines EE 4
H Installer für Tomcat-Anwendung Allgemeines EE 5
A Tomcat in Eclipse Allgemeines EE 11
T Tomcat: Sessions bleiben zu lange erhalten Allgemeines EE 13
C Tomcat Zugriff auf lokale Dateien Allgemeines EE 2
A Tomcat, Exceptions beim redeploy Allgemeines EE 4
P Hilfe: Tomcat periodischer Absturz Allgemeines EE 5
MQue Tomcat reload Allgemeines EE 4
neurox Tomcat stoppen Allgemeines EE 1
S Unterschied zwischen Tomcat und Application Server? Allgemeines EE 3
MQue Tomcat PermGen Allgemeines EE 7
MQue Tomcat Methodenaufruf Allgemeines EE 3
P Eclipse Tomcat Plugin funktioniert nicht mit externem TC-Server? Allgemeines EE 4
MQue TCP- Verbindung nach Tomcat- Start (global) starten Allgemeines EE 4
reibi Tomcat Proxy eintragen Allgemeines EE 2
P CXF Project auf Tomcat laufen lassen - wie? Allgemeines EE 35
R (TOMCAT] Installation Tomcat auf WinXP Allgemeines EE 8
S Tomcat + Eclipse Allgemeines EE 6
T Security Manager in Tomcat Allgemeines EE 2
S Unterschiedliche Pfade bei Tomcat Allgemeines EE 4
ps EJB3 in Tomcat. das hat selbst mich erstaunt Allgemeines EE 18
B Tomcat Manager - .war Datei hochladen. Einfache Frage Allgemeines EE 5
G Probleme im Tomcat - loading WebappClassLoader Allgemeines EE 3
O ApplicationServer vs. Tomcat Allgemeines EE 5
G Verbindung zu Tomcat Allgemeines EE 15
B Tomcat -> Funktions User Credentials hinterlegen Allgemeines EE 7
B fmt:setBundle => Wo liegt die Properties-Datei im Tomcat? Allgemeines EE 3
U Tomcat Compilierproblem Allgemeines EE 2
A Tomcat -- JSP: komisches Problem Allgemeines EE 11
W Speicher-Problem bei WebApp unter Tomcat, Struts, Hibernate Allgemeines EE 3
M Gelegentlicher Absturz Tomcat Anwendung: PermGen Space Allgemeines EE 6
R Error ServletContextListener auf Tomcat 6 Allgemeines EE 2
Y myFaces 1.2 und Tomcat 5.x / 6.0 Allgemeines EE 9
S tomcat session timeout - und was danach? Allgemeines EE 1
A Tomcat startet nicht, Einstellungsfehler? Allgemeines EE 3
S Auf Datei ausserhalb des Tomcat zugreifen Allgemeines EE 4
S JSP / Tomcat / Eclipse / Unable to compile class for JSP Allgemeines EE 4
E JBoss mit existierendem Tomcat nutzen? Allgemeines EE 4
M JSP: Tomcat: Serverfehler 500 nur beim IE. Allgemeines EE 2
G JSF 1.2 unter Netbeans 6 mit Tomcat 6.0 ->Navigationsprob Allgemeines EE 6
O eclipse - tomcat: Problem bei einfachem Webservice Allgemeines EE 16
L Tomcat Service mit JPDA debugging starten Allgemeines EE 2
J Tomcat: "Unable to get connection, DataSource invalid&q Allgemeines EE 8
A web.xml für Servlet in Tomcat 5.5 erstellen Allgemeines EE 2
F Tomcat: zentraler Class-Ordner? Allgemeines EE 2
A web.xml für Servlet in Tomcat erstellen Allgemeines EE 6
T Tomcat: JNDI + JDBC Problem Allgemeines EE 3
N Zugriff auf Webapp nur für localhost definieren (Tomcat) Allgemeines EE 2
byte Tomcat Deployment Problem (HTTP Status 503) Allgemeines EE 8
H Tomcat, MySQL Allgemeines EE 4
B tomcat verbergen Allgemeines EE 3
M classNotFoundexception vom tomcat Allgemeines EE 10
B Liferay + Tomcat Allgemeines EE 4
K tomcat: session-unabhängiges speichern Allgemeines EE 3
G Tomcat übersetzt nichts mehr Allgemeines EE 6
M tomcat beim booten mit starten Allgemeines EE 4
F Serverdienst in Tomcat implementieren Allgemeines EE 14
J Tomcat mit eigener Session-Implementierung Allgemeines EE 15
V tomcat 6 webserver oder was ist sein Sinn? Allgemeines EE 3
G eigener Tomcat-Connector f. propiet. Protokoll via TCP/IP Allgemeines EE 2
J wsdl-tomcat-AXIS Allgemeines EE 2
G Tomcat unter Eclipse starten Allgemeines EE 9
F Tomcat mit 128 MB Ram Allgemeines EE 9
C Unable to query Tomcat Manager: couldn't connect to host Allgemeines EE 2
A Cronjob mit Tomcat starten ? Allgemeines EE 4
B Connection Poll ohne TomCat Allgemeines EE 5
N Tomcat GWT-Anwendung - An beliebiger Stelle schreiben Allgemeines EE 2
E Tomcat Einstellungen Allgemeines EE 10
B Servlet-Api.jar auf JBoss? (Migration von Tomcat zu JBoss) Allgemeines EE 4
H Eine kurze Verständnisfrage zum Tomcat Allgemeines EE 2
S Hibernate, Tomcat und Eclipse treiben mich zum Wahnsinn. Allgemeines EE 2
F webanwendung läuft nicht auf Tomcat Allgemeines EE 2
M Tomcat, Hibernate, MySQL und die EOFException Allgemeines EE 7
Y Tomcat Thread-Handling Allgemeines EE 2
K Tomcat als Client nutzen Allgemeines EE 2
L Tomcat auf Windows Server 2003 Allgemeines EE 10
T Sysdeo Eclipse Tomcat Plug-in Allgemeines EE 4
H Tomcat in jbuilder mit startup.bat starten Allgemeines EE 5
P Tomcat Servlet POST Daten als Array Allgemeines EE 2

Ähnliche Java Themen

Neue Themen


Oben