【发布时间】:2012-03-27 19:04:38
【问题描述】:
我正在尝试反序列化包含方法的 XML 文件。 片段看起来像:
XMLDecoder decoder = new XMLDecoder(os);
deSerializedObject = decoder.readObject();
decoder.close();
return deSerializedObject;
当 XML 文件不包含每个对象的方法时。它会抛出 NoSuchMethodException @readObject。
java.lang.NoSuchMethodException: 找不到名为 add 的方法 在 java.beans.Statement.findMethod(Statement.java:454) 在 java.beans.Statement.invokeMethodImpl(Statement.java:247) 在 java.beans.Statement.access$000(Statement.java:46) 在 java.beans.Statement$1.run(Statement.java:130) 在 java.security.AccessController.doPrivileged(AccessController.java:284) 在 java.beans.Statement.invokeMethod(Statement.java:127) 在 java.beans.Expression.getValue(Expression.java:67) 在 java.beans.XMLDecoder$SAXHandler.executeCommon(XMLDecoder.java:392) 在 java.beans.XMLDecoder$SAXHandler.execute(XMLDecoder.java:321) 在 java.beans.XMLDecoder$SAXHandler.endElement(XMLDecoder.java:286) 在 org.apache.xerces.parsers.AbstractSAXParser.endElement(未知来源) 在 org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanEndElement(未知 资源) 在 org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(未知 资源) 在 org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(未知 资源) 在 org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) 在 org.apache.xerces.parsers.XML11Configuration.parse(未知来源)在 org.apache.xerces.parsers.XMLParser.parse(未知来源)在 org.apache.xerces.parsers.AbstractSAXParser.parse(未知来源)
在 org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(未知 来源)在 org.apache.xerces.jaxp.SAXParserImpl.parse(未知来源) 在 javax.xml.parsers.SAXParser.parse(Unknown Source) 在 java.beans.XMLDecoder.readObject(XMLDecoder.java:662)
问题是我无法捕捉到这个异常。正确的处理方法是什么?
try{
deSerializedObject = decoder.readObject();
System.out.println("We are after read object");
}
catch (NoSuchMethodException e)
{
System.out.println("We are in catch block !!");
e.printStackTrace();
}
decoder.close();
return deSerializedObject;
这里的错误是“NoSuchMethodException 的无法到达的 catch 块。这个异常永远不会从 try 语句体中抛出”
XML 看起来像
<?xml version="1.0" encoding="UTF-8"?>
<java version="1.6.0" class="java.beans.XMLDecoder">
<object class="java.util.ArrayList">
<void method="add">
<object class="InfoParameters">
<void property="Name">
<string>Jay</string>
</void>
<void property="Level">
<string>10</string>
</void>
</object>
<object class="InfoParameters">
<void property="Name">
<string>Hir</string>
</void>
<void property="Level">
<string>10</string>
</void>
</object>
</void>
</object>
</java>
【问题讨论】:
-
哦,我明白了,因为
readObject()没有被声明为抛出NoSuchMethodExceptionJava 认为不可能发生这种情况,请尝试在NoSuchMethodException之后添加一个默认异常块.我会把它添加到我下面的帖子中。 -
代码中肯定有其他你没有发布的东西。根据错误消息
readObject()不是异常的根本原因,所以它必须来自不同的语句 -
你能发布序列化对象的 XML 版本吗?那里肯定发生了什么事。
-
@Hunter 添加了 XML 版本。