gpt4 book ai didi

java - 为什么Java servlet 不能发送对象?

转载 作者:行者123 更新时间:2023-12-02 08:33:09 25 4
gpt4 key购买 nike

我使用以下方法从 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); }

在接收端,代码如下所示:

  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())); }

但是我无法从接收端的 Java 应用程序获取对象,为什么?错误消息如下所示:

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 ...

最佳答案

java.lang.ClassNotFoundException: PayPal_Monitor.Contact_Info_Entry

该类也应该存在于接收端的运行时类路径中。

关于java - 为什么Java servlet 不能发送对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2741151/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com