Gente estou com o seguinte problema, recebo um arquivo serializado que jogo em tres servidores unix.
em cada servidor eu abro o arquivo e altero uma propriedade de uma classe colocando valores distintos por servidor.
O mesmo arquivo eu consigo alterar em 2 servidores, porém no terceiro me ocorre um erro:
java.lang.ExceptionInInitializerError
at sun.misc.Unsafe.ensureClassInitialized(Native Method)
at sun.reflect.UnsafeFieldAccessorFactory.newFieldAccessor(UnsafeFieldAccessorFactory.java:37)
at sun.reflect.ReflectionFactory.newFieldAccessor(ReflectionFactory.java:148)
at java.lang.reflect.Field.acquireFieldAccessor(Field.java(Compiled Code))
at java.lang.reflect.Field.getFieldAccessor(Field.java(Compiled Code))
at java.lang.reflect.Field.getLong(Field.java:475)
at java.io.ObjectStreamClass.getDeclaredSUID(ObjectStreamClass.java:1707)
at java.io.ObjectStreamClass.access$400(ObjectStreamClass.java:97)
at java.io.ObjectStreamClass$4.run(ObjectStreamClass.java:443)
at java.security.AccessController.doPrivileged1(Native Method)
at java.security.AccessController.doPrivileged(AccessController.java(Compiled Code))
at java.io.ObjectStreamClass.<init>(ObjectStreamClass.java(Compiled Code))
at java.io.ObjectStreamClass.lookup(ObjectStreamClass.java(Compiled Code))
at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java(Compiled Code))
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java(Compiled Code))
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java(Compiled Code))
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java(Compiled Code))
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java(Compiled Code))
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java(Compiled Code))
at java.io.ObjectInputStream.defaultReadObject(ObjectInputStream.java(Compiled Code))
Depois ele indica o erro de mull pointer que ocorreu dentro de uma das classes do arquivo serializado: (Estas classes não são de meu domínio, tenho apenas o jar)
Caused by: java.lang.NullPointerException
at com.empresaExterna.config.business.ConfigAccess.instancia(ConfigAccess.java:47)
at com.empresaExterna.chamada.runtime.RuntimeChamada.<clinit>(Unknown Source)
Não entendo porque em dois servidores eu consigo abrir e no terceiro não:
Segue o código que uso para ler/editar:
InputStream input = new FileInputStream(destino);
ObjectInputStream ois = new ObjectInputStream(input);
ClasseExterna c = (ClasseExterna) ois.readObject(); //Bem aqui é que ocorre o Erro
c.getRuntimeProperties().setNomeServidor(serverName);
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(destino));
out.writeObject(c);
out.close();
Já bati a versão do jre e versão do SO, mas não peguei nada ainda.
Esta classe serializada é um objeto grande, composto de várias classes.