2013-05-09 3 views
0

У меня есть XStream для клонирования. Вот мой простой код, у меня мало опыта.Java XStream Deep Copy повышает исключение ObjectAccessException

com.thoughtworks.xstream.XStream XSTREAM = new com.thoughtworks.xstream.XStream(); 

Позже я хранить экземпляры клонов в хэш-таблице (я знаю, что это не очень хорошая идея хранить на нем, но это традиционная система).

Я хранил его в классе ученика, позже я хранил (клонировал) другой экземпляр Студента и поднимал.

com.thoughtworks.xstream.converters.reflection.ObjectAccessException: Could not call com.model.Student_$$_javassist_83.writeReplace():null java.lang.NullPointerException 

Вот мой код для хранения объектов клонирования.

public void keep(String key, Object value) 
{ 
    Object obj = XSTREAM.fromXML(XSTREAM.toXML(value)); 
    storage.put(key,obj); 
} 

Я думаю, что здесь есть исходный код, в котором возникает проблема. [Источники XStream.] [Отрывок]

public Object callWriteReplace(Object object) 
{    
       Method writeReplaceMethod = getMethod(object.getClass(), "writeReplace", null, true); 
       if (writeReplaceMethod != null) { 
        try { 
         Object[] EMPTY_ARGS = new Object[0]; 
         return writeReplaceMethod.invoke(object, EMPTY_ARGS); 
        } catch (IllegalAccessException e) { 
         throw new ObjectAccessException("Could not call " + object.getClass().getName() + ".writeReplace()", e); 
        } catch (InvocationTargetException e) { 
         throw new ObjectAccessException("Could not call " + object.getClass().getName() + ".writeReplace()", e.getTargetException()); 
        } 
      } else { 
        return object; 
       }    
     } 

Я надеюсь, что кто-то может вести меня, я немного потерял на эту тему.

Это след. Кажется, когда я очищаю зависимости примера clazz student.setListOfPhones(null), он работает; исключение выбрасывает уровень 2 или 3 на графике. Почему это в соответствии с XStream гласит:

Стек след:

com.thoughtworks.xstream.converters.reflection.ObjectAccessException: Could not call com.model.Subjects_$$_javassist_224.writeReplace() : null 
java.lang.NullPointerException 
at javassist.util.proxy.RuntimeSupport$DefaultMethodHandler.invoke(RuntimeSupport.java:37) 
at com.model.Subjects_$$_javassist_224.writeReplace(Subject_$$_javassist_224.java) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
at java.lang.reflect.Method.invoke(Method.java:597) 
at com.thoughtworks.xstream.converters.reflection.SerializationMethodInvoker.callWriteReplace(SerializationMethodInvoker.java:88) 
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.marshal(AbstractReflectionConverter.java:60) 
at com.thoughtworks.xstream.core.AbstractReferenceMarshaller.convert(AbstractReferenceMarshaller.java:69) 
at com.thoughtworks.xstream.core.TreeMarshaller.convertAnother(TreeMarshaller.java:58) 
at com.thoughtworks.xstream.core.AbstractReferenceMarshaller$1.convertAnother(AbstractReferenceMarshaller.java:84) 
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.marshallField(AbstractReflectionConverter.java:229) 
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter$2.writeField(AbstractReflectionConverter.java:208) 
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter$2.<init>(AbstractReflectionConverter.java:171) 
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.doMarshal(AbstractReflectionConverter.java:116) 
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.marshal(AbstractReflectionConverter.java:72) 
at com.thoughtworks.xstream.core.AbstractReferenceMarshaller.convert(AbstractReferenceMarshaller.java:69) 
at com.thoughtworks.xstream.core.TreeMarshaller.convertAnother(TreeMarshaller.java:58) 
at com.thoughtworks.xstream.core.AbstractReferenceMarshaller$1.convertAnother(AbstractReferenceMarshaller.java:84) 
+0

Вызывается ли ошибка при вызове метода «fromXML»? – Dave

+0

Исключение составляет здесь. XSTREAM.toXML (значение); – javiut

+0

Можете ли вы добавить полный стек? – Dave

ответ

1

привет я решил эту проблему был другой метод создания неполной копии на этом классе Student и, конечно, когда XStream получил класс отношение не было достаточно глубоко для XStream и NullPointerException были Throw .. поблагодарить Dave god Bless.