2016-05-28 5 views
0

クラスをリファクタリング(移動)して、セッションを逆シリアル化しようとしている間に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; 
} 
} 

答えて

0

さて問題は、スタックトレースは、Tクラスを指定していないということです。

EDIT

は、以下の結果クラスが追加されました。

これは、ここでは問題であるTクラスではないためです。問題はResultクラスです。例外メッセージを信頼してください。

クラスローダは、あなたのResultクラスを見つけることができない、なぜ私はあなたを伝えることはできませんが、可能な説明は、次のとおりです。

  • Resultクラスは、このクラスがいくつかに依存して、あなたのWebアプリケーションのクラスローダのクラスパス上にない場合、または
  • 不足している他のクラス、または
  • このクラスは、初期化に失敗した他のクラスに初期化依存関係があります。
+0

結果クラスは2014年以降変更されず、移動もされておらず、最近このエラーが発生し始めました。 – user3673749

+0

私はそれが失敗した結果クラスの中のTの初期化だと思います。(結果クラスを質問に追加しました) – user3673749

+0

いいえ。すなわち静的変数のクラスの初期化およびその静的ブロックの実行を含む。これらがチェックされていない例外をスローすると、クラスは失敗したものとしてマークされます。これが起こった場合、元の問題を報告している他のスタックトレースが表示されるはずです –

関連する問題