Ich refaktoriert (bewegt) eine Reihe von Klassen und jetzt bekomme ich eine ClassNotFoundException
beim Versuch, die Session zu deserialisieren. Klassisch.java ClassNotFoundException während der Deserialisierung von Generics nach Refactoring geworfen
Ich habe eine custome Deserializer SessionDeserializer extends ObjectInputStream
erstellt, die für die meisten Klassen mit Ausnahme einer generischen Klasse Result<T>
funktioniert.
Die generische Klasse an sich hat sich nicht verschoben, daher vermute ich, dass das Problem in der Objektklasse T
liegt, die verschoben wurde.
Jetzt ist das Problem, dass der Stacktrace nicht die T
Klasse spezifiziert:
java.lang.ClassNotFoundException: com.mysite.shared.beans.Result
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1714)
...
Haben Sie einen Weg kennen, um dieses Problem zu umgehen: entweder durch Feststellung, die T
Klasse innerhalb des Result<T>
Objekts enthalten ist und Anpassung der SessionDeserializer
oder durch Überspringen der Deserialisierung des Objekts Result<T>
insgesamt?
EDIT
Hinzugefügt wird die Ergebnisklasse unter:
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;
}
}
Die Sache ist die Ergebnisklasse hat sich seit 2014 nicht geändert und verschoben und ich habe erst vor kurzem begonnen, diesen Fehler zu sehen. – user3673749
Ich denke, es ist die Initialisierung des T innerhalb der Ergebnisklasse, die fehlschlägt (Ich habe die Ergebnisklasse zur Frage hinzugefügt) – user3673749
Nein ... Ich meine einige >> Klasse << Initialisierung; d.h. die Initialisierung der statischen Variablen der Klassen und die Ausführung ihrer statischen Blöcke. Wenn diese eine ungeprüfte Ausnahme auslösen, wird eine Klasse als fehlgeschlagen markiert. Wenn dies passiert ist, sollten andere Stacktraces das ursprüngliche Problem melden. –