如何捕获NoSuchMethodException

时间:2012-03-10 18:47:34

标签: java xml exception

我正在尝试反序列化包含方法的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>

2 个答案:

答案 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) {
    ...
}

这应该捕获每个可能的异常和错误,因为它是所有异常的基类。