クラスをリファクタリング(移動)して、セッションを逆シリアル化しようとしている間にClassNotFoundException
を取得しました。クラシック。リバクタリング後のジェネリックスの逆シリアル化中にClassNotFoundExceptionがスローされました
私は、汎用クラスResult<T>
を除いてほとんどのクラスで正常に機能するカスタネットデシリアライザSessionDeserializer extends ObjectInputStream
を作成しました。
ジェネリッククラス自体は移動していないので、移動されたT
オブジェクトクラスに問題があると推測しています。
java.lang.ClassNotFoundException: com.mysite.shared.beans.Result
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1714)
...
は、あなたがこの問題を回避する方法を知っていますか:
今の問題は、スタックトレースがT
クラスを指定していないということである発見によってT
クラスはResult<T>
オブジェクトの内部に収容されているそのいずれかとSessionDeserializer
を調整するか、またはResult<T>
オブジェクトの逆シリアル化をスキップすることによって、
public class Result<T> implements Serializable{
private static final long serialVersionUID=1L;
protected T t=null;
protected boolean success=false;
protected Map<String,String> errors=new HashMap<String,String>();
protected String message=null;
public void setData(T t){
this.t=t;
}
public T getData(){
return t;
}
public boolean isSuccess(){
return success;
}
public Map<String,String> getErrors(){
return errors;
}
public void setSuccess(boolean success){
this.success=success;
}
public void setErrors(Map<String,String> errors){
this.errors=errors;
}
protected void addError(String field, String msg){
errors.put(field,msg);
}
public String getMessage(){
return message;
}
public void setMessage(String message){
this.message=message;
}
}
結果クラスは2014年以降変更されず、移動もされておらず、最近このエラーが発生し始めました。 – user3673749
私はそれが失敗した結果クラスの中のTの初期化だと思います。(結果クラスを質問に追加しました) – user3673749
いいえ。すなわち静的変数のクラスの初期化およびその静的ブロックの実行を含む。これらがチェックされていない例外をスローすると、クラスは失敗したものとしてマークされます。これが起こった場合、元の問題を報告している他のスタックトレースが表示されるはずです –