Как поймать NoSuchMethodException - PullRequest
2 голосов
/ 10 марта 2012

Я пытаюсь десериализовать XML-файл, содержащий методы. Фрагмент выглядит так:

 XMLDecoder decoder = new XMLDecoder(os); 
    deSerializedObject = decoder.readObject(); 
    decoder.close();
    return deSerializedObject;

Когда XML-файл не содержит метода для каждого объекта. Он выбрасывает NoSuchMethodException @ readObject.

java.lang.NoSuchMethodException: не найден метод с добавлением имени в 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 (неизвестный источник) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanEndElement (Неизвестно Источник) в org.apache.xerces.impl.XMLDocumentFragmentScannerImpl $ FragmentContentDispatcher.dispatch (Неизвестно Источник) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument (Неизвестно Источник) в org.apache.xerces.parsers.XML11Configuration.parse (неизвестный источник) в 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 (неизвестный источник) на 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. Это исключение никогда не выдается из тела оператора 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 ]

3 голосов
/ 10 марта 2012

Почему вы не можете поймать это исключение?

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;
0 голосов
/ 10 марта 2012

Если по какой-то причине «catch (Exception e)» не работает, попробуйте:

try {
    ...
} catch (Throwable t) {
    ...
}

Это должно перехватывать все возможные исключения и ошибки, поскольку это базовый класс для всех исключений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...