我正在尝试反序列化包含方法的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) at java.beans.Statement.invokeMethodImpl(Statement.java:247) at java.beans.Statement.access $ 000(Statement.java:46) 在Java.security.AccessController.doPrivileged的java.beans.Statement $ 1.run(Statement.java:130)中(AccessController.java:284) at java.beans.Statement.invokeMethod(Statement.java:127) 在java.beans.XMLDecoder的java.beans.Expression.getValue(Expression.java:67)$ SAXHandler.executeCommon(XMLDecoder.java:392) at java.beans.XMLDecoder $ SAXHandler.execute(XMLDecoder.java:321) 在java.beans.XMLDecoder $ SAXHandler.endElement(XMLDecoder.java:286)at at org.apache.xerces.parsers.AbstractSAXParser.endElement(未知来源) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanEndElement(未知 资源) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl $ FragmentContentDispatcher.dispatch(Unknown 资源) 在org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(未知 资源) 在org.apache.xerces.parsers.XML11Configuration.parse(未知来源)at org.apache.xerces.parsers.XML11Configuration.parse(未知来源)at org.apache.xerces.parsers.XMLParser.parse(未知来源)at org.apache.xerces.parsers.AbstractSAXParser.parse(未知来源)
在org.apache.xerces.jaxp.SAXParserImpl $ JAXPSAXParser.parse(未知 来自org.apache.xerces.jaxp.SAXParserImpl.parse(未知来源) 在java.beans.XMLDecoder.readObject(XMLDecoder.java:662)的javax.xml.parsers.SAXParser.parse(未知来源)
问题是我无法捕获此异常。处理它的正确方法是什么?
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>
答案 0 :(得分:3)
为什么你不能抓住这个例外?
XMLDecoder decoder = new XMLDecoder(os);
try
{
deSerializedObject = decoder.readObject();
}
catch(NoSuchMethodException nsme)
{
System.err.println(nsme.getMessage());
}
catch(Exception e)
{
//try me
}
decoder.close();
return deSerializedObject;
答案 1 :(得分:0)
如果出于某种原因“catch(例外e)”无效,请尝试:
try {
...
} catch (Throwable t) {
...
}
这应该捕获每个可能的异常和错误,因为它是所有异常的基类。