# SCHWERWIEGEND: NullPointerException bei Tomcat



## ghoulkar (30. Mai 2008)

Ich bekomme gelegentlich eine NullPointerException, die ich mir nicht erklären kann.
In den Tomcat logs steht folgendens:

localhost.2008-05-29.log:

29.05.2008 16:45:37 org.apache.catalina.core.StandardWrapperValve invoke
SCHWERWIEGEND: Servlet.service() for servlet jsp threw exception
java.lang.NullPointerException
        at org.apache.jsp.index_jsp._jspService(index_jsp.java:498)
        at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:337)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
        at java.lang.Thread.run(Thread.java:619)

Die Meldung im Browser war aufschlussreicher, habe ich aber leider nicht mehr zur Hand und da der Fehler nicht reproduzierbar ist, kann ich sie wohl erst nachliefern wenn sie das nächste Mal aufgetreten ist.

Ein Teil davon lautete:

An error occurred at line: 114 in the jsp file: /[...]
java.lang.NullPointerException

Die jsp sieht so aus:
<% HashMap<String,Vector<Getraenk>> getraenkeKarte = Events.getGetraenke(); %>
<%Vector<Getraenk> getraenke =  getraenkeKarte.get("Warme Getraenke"); %>

Besagte Zeile 114:
<% for (int i=0; i<getraenke.size(); i++ ) { %>

und das sind die passenden Methoden dazu:


```
public static HashMap<String, Vector<Getraenk>> getGetraenke(){
		HashMap<String, Vector<Getraenk>> getraenke = new HashMap<String, Vector<Getraenk>>();
		HashMap<Integer, String> getraenkeart = getGetraenkeArt();
		Iterator<Integer> artIter = getraenkeart.keySet().iterator();
		while (artIter.hasNext()){
			int next = artIter.next();
			getraenke.put(getraenkeart.get(next), getGetraenke(next));
		}
		return getraenke;
	}

       public static Vector<Getraenk> getGetraenke(int getraenkeart_id){
		Vector<Getraenk> getraenke = new Vector<Getraenk>();
		Connection con = DbConnectionPool.getConnection();
		String query = "[...];
		try{
			PreparedStatement pstmt = con.prepareStatement(query);
			pstmt.setInt(1, getraenkeart_id);
			ResultSet result = pstmt.executeQuery();
			while (result.next()){
				Getraenk g = new Getraenk(
                                                        result.get([...])
                                                        [...]
						);
				getraenke.add(g);
			}
			pstmt.close();
		}catch(Exception e){
			System.out.println(query);
			e.printStackTrace();
		}finally{
			DbConnectionPool.returnConnection(con);
		}
		return getraenke;
	}
```

Eigentlich kann die Methode doch gar nicht null zurückgeben oder übersehe ich etwas? 

Meistens reicht es die gleiche Seite nochmal aufzurufen um sie angezeigt zu bekommen. Ansonsten scheint nach einem Tomcat Neustart alles wieder in Ordnung, ist aber leider nicht so. Nach einer unbestimmten Zeit tritt der Fehler wieder auf.

Auf dem Server:
Apache Tomcat Version 6.0.16
Using JRE_HOME: [...]/jdk1.6.0_05/jre

Bei google sinds leider nur 9 Treffer, die mir nicht weiterhelfen.
Hat jemand eine Idee?


----------



## ms (30. Mai 2008)

```
at org.apache.jsp.index_jsp._jspService(index_jsp.java:498)
```
Zeig doch mal den code von index_jsp.java um Zeile 490 herum.

Bei deinem Code ist mir aufgefallen, dass du dein Resultset nicht schließt.

ms


----------



## HLX (30. Mai 2008)

In den beiden JSP-Zeilen steht nirgendwo ein Aufruf der besagten Methode "getGetraenke()". Wo ist hier der Bezug?

Du rufst anscheindend stattdessen "getraenkekarte.get(...)" auf - was dir wohl in bestimmten Konstellationen null zurückliefert.


----------



## ghoulkar (31. Mai 2008)

@ms:
Wo finde ich die index_jsp.java?

Dass das ResultSet nicht geschlossen wird sollte kein Problem sein, 
da es automatisch mit dem PreparedStatement geschlossen wird.

@HLX
Vollkommen richtig, ich hatte noch etwas vergessen.

Ich habe in den log files noch andere Exceptions gefunden:

1. PSQLException: Die Abfrage lieferte kein Ergebnis 
    nach einem INSERT Statement.

2. PSQLException: Eingabe/Ausgabe-Fehler {0} beim Senden an das Backend
    nach SELECT Statements.

Auch dazu gibt es nicht viele Treffer.


----------



## ghoulkar (31. Mai 2008)

Zur Zeit sieht es so aus, als wären die Exceptions zustande gekommen, weil Connections zwar einmal aus dem Pool genommen, dann aber mehrmals zurückgegeben wurden. Das würde auch dazu passen, dass das System zunächst stabil läuft und nach gewisser Zeit Exceptions wirft.
Ich hoffe das war der Fehler. 
Vielen Dank für die Mühe erstmal.


----------

