# Exception bei Cookie lesen



## Asha'man (16. Feb 2004)

Hallo Leute,

ich bastel gerade für meine kleine Community eine kleine Seite, wo sich jeder für ein Treffen anmelden kann. Hierzu möchte ich den Usernamen automatisch über den Cookie der Community einlesen und da ich eh vor habe Java zu lernen, habe ich gedacht, machste das ganze in Java anstatt in Perl.

Funktioniert leider (noch) nicht.  Und ich bräuchte mal eure Hilfe.

Ich verwende Tomcat 5.0.18 als Applicationserver und nutze die IMHO sehr schicke TemplatingEngine Velocity (ist sicher Geschmackssache, mir gefällts). Zum coden nehme ich Eclipse M6. Kostenlos und dafür sehr sehr geil. Ausserdem steht ne große engagierte Community dahinter, was ich sehr wichtig finde bei Supportfragen, etc.

Folgende Klassenauszüge sind interessant:

Dieses Servlet hier füllt das Template mit Leben und zeigt es an. Das Try/Catch oben habe ich rausgenommen, weil mir die Logmeldung zu kurz war. Was habe ich noch für Möglichkeiten dort zu catchen und wie finde ich das demnächst selber raus?:


```
public class servShowParticipants extends VelocityServlet
{
	public Template handleRequest( HttpServletRequest request,
								   HttpServletResponse response,
								   Context context )
	{
		DBParticipants dbPart = new DBParticipants();
		String username = "";
		//try{
			Cookie[] cookies = request.getCookies();
			System.err.println(cookies);
			username = cookieValue.getCookieValue(cookies, "POSTNUKESID", "not logged in");
		/*}
		catch ( Exception e )
		{
			System.err.println("Exception caught: " + e);
		}*/
		
		Vector vec = dbPart.getParticipants();
		context.put("username", username);
		context.put("participants", vec );
		Template template = null;
...
```

Hier gebe ich den Wert des Cookies zurück:


```
/*
 * Created on 16.02.2004
 *
 * To change the template for this generated file go to
 * Window - Preferences - Java - Code Generation - Code and Comments
 */
package celicameet.main;

import javax.servlet.http.Cookie;

/**
 * @author Asha'man
 *
 * To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Generation - Code and Comments
 */
public class cookieValue {
	public static String getCookieValue(Cookie[] cookies,
										  String cookieName,
										  String defaultValue) {
		for(int i=0; i<cookies.length; i++) {
		  Cookie cookie = cookies[i];
		  if (cookieName.equals(cookie.getName()))
			return(cookie.getValue());
		}
		return(defaultValue);
	  }
}
```

Und das ist die Exception, die ich bekomme:


```
VelocityServlet : Error processing the template

java.lang.NullPointerException
java.lang.NullPointerException
	at celicameet.main.cookieValue.getCookieValue(Unknown Source)
	at celicameet.main.servShowParticipants.handleRequest(Unknown Source)
	at org.apache.velocity.servlet.VelocityServlet.doRequest(VelocityServlet.java:372)
	at org.apache.velocity.servlet.VelocityServlet.doGet(VelocityServlet.java:333)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:743)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:284)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:204)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:257)
	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:564)
	at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:245)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:199)
	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:564)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:195)
	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:164)
	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:149)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:564)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:156)
	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:564)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:972)
	at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:206)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:828)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:700)
	at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:584)
	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
	at java.lang.Thread.run(Thread.java:534)
```

Ich bastel jetzt seid ner Stunde an dem Fehler rum, aber ich hab keine Idee, warum er an dieser Stelle ne NullPointerException wirft. Warscheinlich ist es ne triviale Lösung oder nen Tippfehler oder so. Ich komm aber nicht drauf. HILFE! 

Wär super, wenn ihr ne Idee habt oder sagen könnt, wo ich suchen soll.

Thomas


----------



## Beni (16. Feb 2004)

Zum catchen: e.printStackTrace()

Ansonsten kenn ich mich nicht mit Cookies aus, aber was ich machen würde:
Bei jeder möglichen und unmöglichen Gelegenheit ein System.out.println() reinhacken, und jeweils ein Wert übergeben.
Wenn dann null rauskommt, weisst du schon eher, wo der Fehler sein könnte.

mfg Beni.

P.S. kann man da nicht auch mit dem Eclipse-Debugger dahinter?


----------



## Asha'man (16. Feb 2004)

Hey Beni,

es funktioniert! Scheinbar cookies war null, weil er keine passenden Cookies zur Domain gefunden hat. Erstaunlicherweise klappt das nur mit meinem Mozilla zuhause nicht. Mozilla in der Firma mit gleichem Cookie funktioniert einwandfrei. Muss mir beide Cookies mal genau anschauen. IMHO sind die gleich.

Danke für den Hinweis mit dem stackTrace(), werd ich gleich mal probieren.

Thomas


----------

