Hi,
I'm trying to send an object to a servlet for processing. However, I keep getting an EOFException or NullPointerException (depending on the order I arrange my code in the applet) on the readObject() method on the servlet. I've checked my code against numerous examples on the NET and don't see an obvious difference. Can someone please help.
Please advise,
Alan Shiers
*******************************************
TOMCAT LOG FILE:
Attempting to read Object...
java.io.EOFException
at java.io.ObjectInputStream$BlockDataInputStream.peekByte(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at TableDataServlet.doPost(TableDataServlet.java:31)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFil terChain.java:237)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain .java:157)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java: 214)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java: 178)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:10 7)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:825)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnecti on(Http11Protocol.java:731)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:5 26)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorke rThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:6 84)
at java.lang.Thread.run(Unknown Source)
TABLEDATASERVLET:
TABLEFORM APPLET:Code:import java.io.*; import java.text.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*; public class TableDataServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { doPost(request,response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { ObjectInputStream inputFromApplet = null; TableData td = null; PrintWriter out = null; String[][] data = null; try { // get an input stream from the applet inputFromApplet = new ObjectInputStream(new BufferedInputStream(request.getInputStream())); System.out.println("Attempting to read Object..."); // read the serialized data from applet Object o = inputFromApplet.readObject(); //<<This is the culprit!! if(o != null && (o instanceof TableData)) { td = (TableData) o; System.out.println("Got Object"); inputFromApplet.close(); data = td.getData(); String firstname = data[0][1]; // send back a confirmation message to the applet out = new PrintWriter(response.getOutputStream()); response.setContentType("text/plain"); out.println("confirmed " + firstname); out.flush(); out.close(); } } catch(Exception e) { e.printStackTrace(); } } class TableData implements Serializable { String[][] data = null; public TableData(String[][] newData) { if(newData != null) data = newData; } public String[][] getData() { return data; } public void setData(String[][] newData) { if(newData != null) data = newData; } } }
Code:package forms; import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.table.*; import javax.swing.event.*; import java.util.*; import java.applet.*; import java.io.*; import java.net.*; public class TableForm extends JApplet implements ActionListener { ... public void actionPerformed(ActionEvent e) { ... if(e.getSource() == submit) { ... //Load up a 2D array String[][] data = new String[RowCount][headers.length]; for(int i = 0; i < RowCount; i++)//rows { for(int j = 1; j < headers.length; j++)//columns { data[i][j - 1] = (String)dm.getValueAt(i,j); } } TableData td = new TableData(data); try { // connect to the servlet String location = processingServlet; URL testServlet = new URL( location ); URLConnection servletConnection = testServlet.openConnection(); if (servletConnection instanceof HttpURLConnection) { ((HttpURLConnection)servletConnection).setRequestMethod("POST"); } else { System.out.println("this connection is NOT an HttpUrlConnection connection"); return; } //inform the connection that we will send output and accept input servletConnection.setDoInput(true); servletConnection.setDoOutput(true); //Don't use a cached version of URL connection. servletConnection.setUseCaches (false); servletConnection.setDefaultUseCaches (false); //Specify the content type that we will send binary data servletConnection.setRequestProperty ("Content-Type", "application/octet-stream"); //send your data to the servlet statusTextArea.append("Sending data to servlet..." + "\n"); ObjectOutputStream outputToServlet = new ObjectOutputStream(servletConnection.getOutputStream()); BufferedReader in = new BufferedReader(new InputStreamReader(servletConnection.getInputStream())); outputToServlet.writeObject(td); outputToServlet.flush(); outputToServlet.close(); statusTextArea.append("Data has been sent." + "\n"); //now wait for a response from the servlet statusTextArea.append("Waiting for response..." + "\n"); String line = ""; while((line = in.readLine()) != null) { statusTextArea.append(line + "\n"); } in.close(); statusTextArea.append("Communication ended." + "\n"); } catch(IOException ioe) { ioe.printStackTrace(); } } } private boolean isNumeric(String str) { for(int i = 0; i < str.length(); i++) { if(!Character.isDigit(str.charAt(i))) return false; } return true; } class TableData implements Serializable { String[][] data = null; public TableData(String[][] newData) { if(newData != null) data = newData; } public String[][] getData() { return data; } public void setData(String[][] newData) { if(newData != null) data = newData; } } }


Reply With Quote


Bookmarks