Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

servlet Fehler

0 views
Skip to first unread message

Schoene

unread,
Jan 11, 2002, 3:50:00 PM1/11/02
to
Hallo,
hab hier ein Problem mit einem recht einfach gestrickten servlet, ich
erhalte folgende Meldung vom Tomcat (3.2) zurueck:

java.lang.IllegalStateException: Can't happen - classname is null, who added
this ?
at
org.apache.tomcat.core.ServletWrapper.loadServlet(ServletWrapper.java:261)
at org.apache.tomcat.core.ServletWrapper.init(ServletWrapper.java:289)
at org.apache.tomcat.core.Handler.service(Handler.java:254)
at org.apache.tomcat.core.ServletWrapper.service(ServletWrapper.java:372)
at
org.apache.tomcat.core.ContextManager.handleStatus(ContextManager.java:1058)
at
org.apache.tomcat.core.ContextManager.internalService(ContextManager.java:77
5)
at org.apache.tomcat.core.ContextManager.service(ContextManager.java:743)
at
org.apache.tomcat.service.http.HttpConnectionHandler.processConnection(HttpC
onnectionHandler.java:213)
at
org.apache.tomcat.service.TcpWorkerThread.runIt(PoolTcpEndpoint.java:416)
at
org.apache.tomcat.util.ThreadPool$ControlRunnable.run(ThreadPool.java:501)
at java.lang.Thread.run(Thread.java)

(man beachte die erste Zeile)

Tomcat 4.01 liefert folgendes:

java.lang.NullPointerException
at Shop.doGet(Shop.java:32)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Application
FilterChain.java:247)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterCh
ain.java:193)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.ja
va:243)
at
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:5
66)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.ja
va:201)
at
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:5
66)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at
org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2344)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164
)
at
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:5
66)
at
org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.
java:170)
at
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:5
64)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:170
)
at
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:5
64)
at
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:462)
at
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:5
64)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java
:163)
at
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:5
66)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at
org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:
1011)
at
org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:1106
)
at java.lang.Thread.run(Unknown Source)

das eigentlich Eigenartige ist nun jedoch, dass das servlet nur manchmal
bei nur dezenten Codeveraenderungen mal funktioniert mal nicht. (Inhalt
eines println() aendern)
Momentan gerade mal wieder nicht, deshalb schreibe ich ja.
Compilieren laesst es sich sowieso immer problemlos.

ich hoffe ich bin nicht allzu OT

Christian

der Quelltext des Servlets ist hier:
http://www.mycgiserver.com/~nonfreezing/Shop2.java


Gerhard Kreutzer

unread,
Jan 11, 2002, 6:15:23 PM1/11/02
to
Schoene schrieb:

>
> Hallo,
> hab hier ein Problem mit einem recht einfach gestrickten servlet, ich
> erhalte folgende Meldung vom Tomcat (3.2) zurueck:
>
> java.lang.IllegalStateException: Can't happen - classname is null, who added
> this ?
> at
[snip rest of exception]
IMO spinnt da der tomcat. "who added this" habe ich immer als "welcher
depp hat das in den code hinzugefügt" interpretiert. mein rat:
tomcat restarten, wenns dann geht ohne das du die sourcen geändert hast,
habe ich warscheinlich recht. die exception kommt bei tomcat 4.0.1
seltener.

> Christian
>
> der Quelltext des Servlets ist hier:
> http://www.mycgiserver.com/~nonfreezing/Shop2.java

danke, hab aber keine zeit zum debuggen.

HTH gerhard

Nico Seessle

unread,
Jan 11, 2002, 7:13:51 PM1/11/02
to
"Schoene" <c.sc...@web.de> schrieb im Newsbeitrag
news:a1nj4t$f85$00$1...@news.t-online.com...

> hab hier ein Problem mit einem recht einfach gestrickten servlet, ich
> erhalte folgende Meldung vom Tomcat (3.2) zurueck:

Gibt es nicht mehr, konnte ich also nicht mal testen. Mit 3.2.4 geht es
problemlos.

> Tomcat 4.01 liefert folgendes:
>
> java.lang.NullPointerException
> at Shop.doGet(Shop.java:32)

In Zeile 32 kann keine NPE auftreten. Ist das ganz sicher der Code, der
diese Fehlermeldungen verursacht hat?

Nico

Schoene

unread,
Jan 11, 2002, 7:22:50 PM1/11/02
to
Ich krieg noch zu viel,
eben hab ich versuchshalber mal:
Cookie[] cookies = request.getCookies();
durch
Cookie[] cookies = new Cookie[8];
cookies = request.getCookies();
ersetzt
und ich konnte genau 1 mal compilieren und laufen lassen,
ich hab dann eine Kommentar an die Stelle geschrieben, noch mal compiliert
und es geht wieder nicht mehr.

Der Fehler tritt allerdings immer parallel auf beiden Servern auf. Den 3.2
kann/darf ich nicht neu starten.

Christian


Schoene

unread,
Jan 11, 2002, 7:27:29 PM1/11/02
to
Ja das ist ganz ganz sicher genau der Code:
Ich habe auch versuchshalber auch mal die Zeile 32 durch folgendes ersetzt:

Cookie[] cookies = new Cookie[8];
cookies = request.getCookies();
das funktionierte genau einmal, siehe oben

Christian


Schoene

unread,
Jan 11, 2002, 7:42:12 PM1/11/02
to
Scheinbar liegt das Problem bei
request.getCookies();
denn kommentiere ich das aus funktioniert es immer.

Ausserdem hab ich noch rausgefunden, dass der Server beim ersten Versuch
eine etwas andere Fehlermeldung ausgibt als bei den folgenden.
1:
java.lang.NullPointerException
at Shop.doGet(Shop.java:34)


at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at

org.apache.catalina.servlets.InvokerServlet.serveRequest(InvokerServlet.java
:446)
at
org.apache.catalina.servlets.InvokerServlet.doGet(InvokerServlet.java:180)


2... :

tschChristian

Gerhard Kreutzer

unread,
Jan 12, 2002, 4:01:51 AM1/12/02
to
Schoene schrieb:

>
> Ich krieg noch zu viel,
> eben hab ich versuchshalber mal:
> Cookie[] cookies = request.getCookies();
> durch
> Cookie[] cookies = new Cookie[8];
> cookies = request.getCookies();
> ersetzt
das ist quatsch, dadurch legst du selbst ein Cookies-Array an. Du willst
doch aber die Cookies vom client.

Cookie[] cookies = request.getCookies();
if(cookies.length >= 1)

Der Code wirft ab tomcat 4.0.1 eine NullPointerException wenn keine
Cookies beim Client gesetzt sind. Da wird jetzt vom tomcat null anstelle
eines leeren Arrays geliefert. Was ja eigentlich richtig ist. Das war
bei älteren Verionen noch nicht so.

versuch mal:
if((cookies != null) && (cookies.length > 0))

Das Ganze kannst du auch vergleichen bei dem Tomcat Beispiel
CookiesExample Zeile 53 in den untersch. Versionen.

HTH gerhard

Nico Seessle

unread,
Jan 12, 2002, 3:27:57 AM1/12/02
to

"Schoene" <c.sc...@web.de> schrieb im Newsbeitrag
news:a1nvsn$4hc$00$1...@news.t-online.com...

Zeile 32 ist bei mir

" registered = true;"

Nico

Nico Seessle

unread,
Jan 12, 2002, 3:30:39 AM1/12/02
to
"Schoene" <c.sc...@web.de> schrieb im Newsbeitrag
news:a1o0oa$iup$03$1...@news.t-online.com...

> Scheinbar liegt das Problem bei
> request.getCookies();
> denn kommentiere ich das aus funktioniert es immer.
>

Wenn wir davon denn mal ausgehen und die Doku erneut lesen...

" public Cookie[] getCookies()
Returns an array containing all of the Cookie objects the client sent with
this request. This method returns null if no cookies were sent."
Ersetzen wir in der Folge die nachfolgende Zeile

if(cookies.length >= 1)

mal durch

if(cookies != null && cookies.length >= 1)

und schauen was passiert.

Nico

Schoene

unread,
Jan 12, 2002, 7:06:28 AM1/12/02
to
sorry erstmal das die Zeilen etwas verrutscht sind,

ich hab jetzt die Abfrage wie im 4.01 Beispiel, was ich mir natuerlich nicht
so genau angeguckt habe gemacht und es funktioniert. In einem anderen
servlet allerdings hab ich die Abfrage genauso gemacht, mit dem hatte ich
noch gar keine Probleme.

Cookie[] cookies = request.getCookies();

if((cookies != null) && (cookies.length > 0))


cookies != null hatte ich auch schon probiert, dann blieb das Ganze
allerdings beim naechsten Aufruf von cookies.length haengen.

vielen Dank

Christian


0 new messages