由於重用的原因,我將當前的序列化/反序列化服務封裝在抽象的泛型類中,該泛型類在整個項目的共享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