У меня есть webapp, который сохраняет состояние на стороне клиента. Штат накапливается в Object []
ClassNotFoundException при десериализации в Weblogic 12c
Object state[] = new Object[10];
state[0] = _parent_s_state_array
state[1] = _some_int;
state[2] = _some_POJO;
..
..
то
- сериализованная
- кодировке Base64
- включен как скрытый вход в ответ
В следующем запросе этого сериализованная состояния возвращается назад, и мы реверсируем шаги по восстановлению состояния на серверах. Эта стратегия отлично работает на несколько сотен страниц.
Но для определенной страницы с использованием определенного POJO с несколькими свойствами String, я получаю ClassNotFoundException
при десериализации. Следует отметить, что объект того же класса был создан и сериализован несколько мгновений назад в одном сеансе JVM, поэтому мы можем исключить, что класс не присутствует в пути к классам.
Некоторые больше наблюдений
- Эта ошибка возникает только в производственных и испытательных платформ, которая находится в Weblogic 12с и никогда не видел в развитии, где он работает в причалу 8 или 9. Поэтому я угадывание это как-то связано с загрузкой классов Weblogic.
- Эта проблема последовательно реплицируется на этой конкретной странице.
- Существуют и другие страницы, которые используют один и тот же класс защиты без каких-либо проблем на той же платформе.
- веб-приложение развертывается из взорвавшегося каталога войны и класс в вопросе присутствует в
WEB-INF/classes/com/xxx/yyy/
Может кто-то обеспечить некоторые указатели/стратегию по отношению к отладке этой проблемы.
Заранее спасибо.
Исключение
ERROR [[ACTIVE] ExecuteThread: '5' for queue: 'weblogic.kernel.Default (self-tuning)'] ClassNotFoundException occured restoring StateManager state from serialized form
java.lang.ClassNotFoundException: com.xxx.yyy.TimeParameters
at java.net.URLClassLoader$1.run(URLClassLoader.java:366) ~[na:1.7.0_65]
at java.net.URLClassLoader$1.run(URLClassLoader.java:355) ~[na:1.7.0_65]
at java.security.AccessController.doPrivileged(Native Method) ~[na:1.7.0_65]
at java.net.URLClassLoader.findClass(URLClassLoader.java:354) ~[na:1.7.0_65]
at java.lang.ClassLoader.loadClass(ClassLoader.java:425) ~[na:1.7.0_65]
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) ~[na:1.7.0_65]
at java.lang.ClassLoader.loadClass(ClassLoader.java:358) ~[na:1.7.0_65]
at java.lang.Class.forName0(Native Method) [na:1.7.0_65]
at java.lang.Class.forName(Class.java:270) [na:1.7.0_65]
at java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:625) ~[na:1.7.0_65]
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1612) ~[na:1.7.0_65]
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1517) ~[na:1.7.0_65]
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1771) ~[na:1.7.0_65]
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350) ~[na:1.7.0_65]
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370) ~[na:1.7.0_65]
at org.apache.commons.collections.map.AbstractHashedMap.doReadObject(AbstractHashedMap.java:1212) ~[weblogic.server.merged.jar:12.1.3.0.0]
at org.apache.commons.collections.map.CaseInsensitiveMap.readObject(CaseInsensitiveMap.java:149) ~[weblogic.server.merged.jar:12.1.3.0.0]
Класс
package com.xxx.yyy;
public class TimeParameters implements Serializable {
/**
*
*/
private static final long serialVersionUID = 5384703411813811209L;
private String yr;
private String qtr;
private String mth;
private String analysisType;
// Getters and Setters
...
...
}
Это была бы моя другая идея. Я также запускал несколько раз в странных проблемах с загрузчиками классов weblogic. –