由于重用的原因,我将当前的序列化/反序列化服务封装在抽象的泛型类中,该泛型类在整个项目的共享JAR中编译。我需要序列化对象到String
Java反序列化问题
该类可以扩展,并且可以在其他JAR/WARs中指定类型(是的,这是一个Web应用程序)。
当我在同一个WAR中进行第一次反序列化测试时,它一切正常,但现在我将抽象类移入另一个JAR中,反序列化时我得到一个ClassNotFoundError。
的基类的结构如下:
public abstract class ConverterBase<T extends Serializable> {
public final Object getAsObject(String str) {
//Use java.io serialization services from the base64 representation
try {
ByteArrayInputStream ba = new ByteArrayInputStream(decoder
.decodeBuffer(str));
try {
ObjectInputStream is = new ObjectInputStream(ba);
try {
Object ret = is.readObject();
return ret;
} finally {
is.close();
}
} finally {
ba.close();
}
} catch (Throwable ex) {
return null;
}
}
public final String getAsString(Object obj) {
//simply do the opposite
}
}
这是为了让未来的变化影响结构这样的方式,所有的子类(即避免的base64,更加高效......)。目前,java.io
解决方案是临时实施。
然后我有同样的WAR内的以下内容:
public class MyPojo implements Serializable {
//Stuff
}
public final class MyPojoConverter extends ConverterBase<MyPojo> { }
扩展这个人是比抽象类不同的归档,并专门上的类型的战争类。
我该怎么做才能避免该错误?
谢谢
搬进另一个包装或另一个罐子? – PeterMmm 2011-06-10 12:34:21
打包战争时,为什么不包含jar文件和缺少的类?通常它只需要在lib子文件夹中(不知道是否需要在Class-Path标记中的战争Manifest中引用它,但我不这么认为) – 2011-06-10 12:35:08
@peter:另一个JAR - @angel:JAR存储在磁盘上的通用库中 – 2011-06-10 13:12:21