Why can't Java servlet sent out an object ?

Posted by Frank on Stack Overflow See other posts from Stack Overflow or by Frank
Published on 2010-04-29T22:19:03Z Indexed on 2010/04/29 23:47 UTC
Read the original article Hit count: 331

Filed under:
|
|
|

I use the following method to send out an object from a servlet :

  public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException
  {
    String Full_URL=request.getRequestURL().append("?"+request.getQueryString()).toString();

    String Contact_Id=request.getParameter("Contact_Id");
    String Time_Stamp=Get_Date_Format(6),query="select from "+Contact_Info_Entry.class.getName()+" where Contact_Id == '"+Contact_Id+"' order by Contact_Id desc";

    PersistenceManager pm=null;
    try
    {
      pm=PMF.get().getPersistenceManager();

      // note that this returns a list, there could be multiple, DataStore does not ensure uniqueness for non-primary key fields
      List<Contact_Info_Entry> results=(List<Contact_Info_Entry>)pm.newQuery(query).execute();

      Write_Serialized_XML(response.getOutputStream(),results.get(0));
    }
    catch (Exception e) { Send_Email(Email_From,Email_To,"Check_License_Servlet Error [ "+Time_Stamp+" ]",new Text(e.toString()+"\n"+Get_Stack_Trace(e)),null); }
    finally { pm.close(); }
  }

  /** Writes the object and CLOSES the stream. Uses the persistance delegate registered in this class.
   * @param os The stream to write to.
   * @param o The object to be serialized.
   */
  public static void writeXMLObject(OutputStream os,Object o)
  {
    // Classloader reference must be set since netBeans uses another class loader to loead the bean wich will fail in some circumstances.
    ClassLoader oldClassLoader=Thread.currentThread().getContextClassLoader();
    Thread.currentThread().setContextClassLoader(Check_License_Servlet.class.getClassLoader());

    XMLEncoder encoder=new XMLEncoder(os);
    encoder.setExceptionListener(new ExceptionListener() { public void exceptionThrown(Exception e) { e.printStackTrace(); }});
    encoder.writeObject(o);
    encoder.flush();
    encoder.close();

    Thread.currentThread().setContextClassLoader(oldClassLoader);
  }

  private static ByteArrayOutputStream writeOutputStream=new ByteArrayOutputStream(16384);

  /** Writes an object to XML.
   * @param out The boject out to write to. [ Will not be closed. ]
   * @param o The object to write.
   */
  public static synchronized void writeAsXML(ObjectOutput out,Object o) throws IOException
  {
    writeOutputStream.reset();
    writeXMLObject(writeOutputStream,o);
    byte[] Bt_1=writeOutputStream.toByteArray();
    byte[] Bt_2=new Des_Encrypter().encrypt(Bt_1,Key);
    out.writeInt(Bt_2.length);
    out.write(Bt_2);
    out.flush();
    out.close();
  }
  public static synchronized void Write_Serialized_XML(OutputStream Output_Stream,Object o) throws IOException { writeAsXML(new ObjectOutputStream(Output_Stream),o); }

At the receiving end the code look like this :

  File_Url="http://"+Site_Url+App_Dir+File_Name;
  try
  {
    Contact_Info_Entry Online_Contact_Entry=(Contact_Info_Entry)Read_Serialized_XML(new URL(File_Url));
  }
  catch (Exception e)
  {
    e.printStackTrace();
  }

  private static byte[] readBuf=new byte[16384];

  public static synchronized Object readAsXML(ObjectInput in) throws IOException
  {
    // Classloader reference must be set since netBeans uses another class loader to load the bean which will fail under some circumstances.
    ClassLoader oldClassLoader=Thread.currentThread().getContextClassLoader();
    Thread.currentThread().setContextClassLoader(Tool_Lib_Simple.class.getClassLoader());

    int length=in.readInt();
    readBuf=new byte[length];

    in.readFully(readBuf,0,length);
    byte Bt[]=new Des_Encrypter().decrypt(readBuf,Key);
    XMLDecoder dec=new XMLDecoder(new ByteArrayInputStream(Bt,0,Bt.length));
    Object o=dec.readObject();
    Thread.currentThread().setContextClassLoader(oldClassLoader);
    in.close();
    return o;
  }

  public static synchronized Object Read_Serialized_XML(URL File_Url) throws IOException { return readAsXML(new ObjectInputStream(File_Url.openStream())); }

But I can't get the object from the Java app that's on the receiving end, why ? The error messages look like this :

java.lang.ClassNotFoundException: PayPal_Monitor.Contact_Info_Entry
Continuing ...
java.lang.NullPointerException: target should not be null
Continuing ...
java.lang.NullPointerException: target should not be null
Continuing ...
java.lang.NullPointerException: target should not be null
Continuing ...

© Stack Overflow or respective owner

Related posts about java

Related posts about servlet