XML을 사용하여 XML (XMLPanelList) 클래스를 만들려고하지만 프로그램을 실행할 때이 오류가 발생합니다.새로운 readObject()/writeObject() 메서드를 사용하여 객체를 직렬화 할 수 없습니다.
<panels> <panel> <name>Test 1</name> <component> <name>TestComponant</name> <type>0</type> </component> </panel> <panel> <name>Test 2</name> <component> <name>TestComponant2</name> <type>1</type> </component> </panel></panels>
com.thoughtworks.xstream.converters.ConversionException: Cannot deserialize object with new readObject()/writeObject() methods
---- Debugging information ----
class : XMLPanel
required-type : XMLPanel
converter-type : com.thoughtworks.xstream.converters.reflection.SerializableConverter
path : /panels/panel
class[1] : XMLPanelList
converter-type[1] : com.thoughtworks.xstream.converters.reflection.ReflectionConverter
version : 1.4.7
-------------------------------
at com.thoughtworks.xstream.converters.reflection.SerializableConverter.doUnmarshal(SerializableConverter.java:333)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshal(AbstractReflectionConverter.java:257)
at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72)
at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:65)
at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66)
at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:50)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.doUnmarshal(AbstractReflectionConverter.java:377)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshal(AbstractReflectionConverter.java:257)
at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72)
at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:65)
at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66)
at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:50)
at com.thoughtworks.xstream.core.TreeUnmarshaller.start(TreeUnmarshaller.java:134)
at com.thoughtworks.xstream.core.AbstractTreeMarshallingStrategy.unmarshal(AbstractTreeMarshallingStrategy.java:32)
at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1185)
at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1169)
at com.thoughtworks.xstream.XStream.fromXML(XStream.java:1040)
at com.thoughtworks.xstream.XStream.fromXML(XStream.java:1031)
at XStreamTest.main(XStreamTest.java:64)
나는 그것을 고치는 법을 모른다. 그리고 Google은 나에게 아무것도 말하지 않는다. 다음은 XML 파일 "test.xml의"
<panels>
<panel>
<name>Test 1</name>
<component>
<name>TestComponant</name>
<type>0</type>
</component>
</panel>
<panel>
<name>Test 2</name>
<component>
<name>TestComponant2</name>
<type>1</type>
</component>
</panel>
</panels>
입니다 그리고 여기에 코드입니다 : 어떻게
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.Vector;
import javax.swing.JFrame;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;
class XMLPanelList {
Vector<XMLPanel> xmlPanels;
public XMLPanelList(){ };
}
class XMLPanel extends JFrame{
String name;
Vector<XMLComponent> xmlComps;
public XMLPanel(){
super("XMLPanel");
}
}
class XMLComponent {
String name;
int type;
public XMLComponent(){}
public XMLComponent(String name, int type){
this.name = name;
this.type = type;
}
}
public class XStreamTest {
public static void main(String[] args) {
try{
BufferedReader br = new BufferedReader(new FileReader(new File("test.xml")));
StringBuilder sb = new StringBuilder();
String line;
while ((line = br.readLine()) != null) {
sb.append(line);
}
String everything = sb.toString();
System.out.println(everything);
br.close();
XStream xstream = new XStream(new DomDriver());
xstream.alias("panels", XMLPanelList.class);
xstream.alias("panel", XMLPanel.class);
xstream.alias("component", XMLComponent.class);
xstream.addImplicitArray(XMLPanelList.class, "xmlPanels", "panel");
xstream.addImplicitArray(XMLPanel.class, "xmlComps", "component");
XMLPanelList xmlTrans = (XMLPanelList) xstream.fromXML(everything);
System.out.println(xstream.toXML(xmlTrans));
}
catch(Exception e){
e.printStackTrace();
}
}
}
을 부여 내가 오류를 수정합니까는?
그래서 나는 당신이 사용하고있는 라이브러리가 작동하는 것으로 가정했다. 직렬화와 비 직렬화간에 다른 jdk 버전을 사용하는 경우 모든 의도와 목적에 따라 문제가 있음을 알 수 있습니다 (http://xstream.10960.n7.nabble.com/Can-t-deserialize-old-xml-with-SynchronizedRandomAccessList- td8305.html). –