Hi all,

You can disregard my message about Tomcat -- it's not a Tomcat
issue. It's a subtle serialization issue....

Thnaks


----- Original Message -----
From: "Tony LaPaso" <[EMAIL PROTECTED]>
To: "Tomcat User" <[EMAIL PROTECTED]>
Sent: Wednesday, July 17, 2002 7:53 PM
Subject: ??? Tomcat Bug? -- Throws NullPointerException ???


> Hello,
>
> I was hoping somebody could run this on a non-Tomcat server.
I've
> used TC v4.0.4 and v4.1.7 and both result in NPEs being thrown
> when I call getServletContext() from within the readObject()
> method of an inner class. Below is a very simple servlet that
> shows the problem.
>
> As you can see, the init() method is able to call
> getServletContext() with no problem. BUT, when init() tries to
> de-serialize an object which is an inner class, the object's
> readObject() method cannot call getServletContext().
>
> I'm not looking for "work-arounds" -- I just want to know if
this
> is a Tomcat bug.
>
>
>
>
>
>
> import java.io.*;
> import javax.servlet.*;
> import javax.servlet.http.*;
>
> public class HelloWorld extends HttpServlet {
>    public void doGet(HttpServletRequest request,
>                      HttpServletResponse response)
>                      throws ServletException, IOException {
>       response.setContentType("text/html");
>       PrintWriter out = response.getWriter();
>
out.write("<html><head><title>Hello</title></head><body>");
>       out.println("Hello there....</body</html>");
>    } // doGet()
>
>    private class Inner implements Serializable {
>       private Inner() {}
>
>       private void readObject(ObjectInputStream ois)
>                               throws Exception {
>          System.out.println("In Inner.readObject()...");
>          ois.defaultReadObject();
>          System.out.println("defaultReadObject completed...");
>          ServletContext sc = getServletContext();  // BOOM!!
>          System.out.println("Got the servlet context!!!");
>       } // readObject()
>    } // Inner
>
>    public void init() {
>       try {
>          System.out.println("The servlet context is: " +
> getServletContext());
>          ByteArrayOutputStream baos = new
> ByteArrayOutputStream();
>          ObjectOutputStream oos = new ObjectOutputStream(baos);
>          oos.writeObject(new Inner());
>          oos.close();
>
>          // Now, deserialize it....
>          ObjectInputStream ois = new ObjectInputStream(new
> ByteArrayInputStream(baos.toByteArray()));
>          Inner inner = (Inner)ois.readObject();
>          System.out.println("Got the inner object...");
>       } catch(IOException e) {
>          System.err.println("Got an exception in init()..." +
e);
>          e.printStackTrace();
>       } catch(ClassNotFoundException e) {
>          System.err.println("Got an exception in init()..." +
e);
>          e.printStackTrace();
>       }
>    } // init()
> } // HelloWorld
>
>
>
> --
> To unsubscribe, e-mail:
<mailto:[EMAIL PROTECTED]>
> For additional commands, e-mail:
<mailto:[EMAIL PROTECTED]>
>


--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to