2012-03-10 14 views
2

メソッドを含むXMLファイルを逆シリアル化しようとしています。 XMLファイルは、すべてのobject.ItはないNoSuchMethodException @ readObjectメソッドをスローするための方法が含まれていない場合はNoSuchMethodExceptionをキャッチする方法

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

: スニペットは次のようになります。

java.lang.NoSuchMethodException:名前のアドオンではありません方法はjava.beans.Statement.invokeMethodImpl(Statement.java:247でjava.beans.Statement.findMethod(Statement.java:454) で を発見されました) at java.beans.Statement.access $ 000(Statement.java:46) at java.beans.Statement $ 1.run(Statement.java:130)at java.security.AccessController.doPrivileged(AccessController.java:284) java.beans.XMLDecoder $ SAXHandler.executeCommon(XMLDecoder.java:392)でjava.beans.Expression.getValue(Expression.java:67)でjava.beans.Statement.invokeMethod(Statement.java:127) で java.beans.XMLDecoder $ SAXHandler.execute(XMLD $ SAXHandler.endElement(XMLDecoder.java:286)at org.apache.xerces.parsers.AbstractSAXParser.endElement(不明なソース) (org.apache.xerces.impl) 組織でorg.apache.xerces.impl.XMLDocumentFragmentScannerImpl $ FragmentContentDispatcher.dispatch(不明 出典)org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(不明 出所) で で.XMLDocumentFragmentScannerImpl.scanEndElement(不明 出所) .apache.xerces.parsers.XML11Configuration.parse(不明なソース) org.apache.xerces.parsers.XML11Configuration.parse(不明なソース) org.apache.xerces.parsers.XMLParser.parse(不明なソース)a org.apache.xerces.jaxp.SAXParserImpl.parseでorg.apache.xerces.jaxp.SAXParserImpl $ JAXPSAXParser.parse(不明 出典)でトン org.apache.xerces.parsers.AbstractSAXParser.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

'readObject()'が 'NoSuchMethodException'をスローすると宣言されていないので、Javaはそのようなことが起こりそうでないと考えていないので、' NoSuchMethodException'の後にデフォルトの例外ブロックを追加してみてください。私はそれを私のポストに追加します。 –

+0

投稿していないコードで何か他のことが起こっている必要があります。エラーメッセージ 'readObject()は例外の根本的な原因ではないので、別のステートメントから来ている必要があります –

+0

シリアル化されたオブジェクトのXMLバージョンを投稿できますか?そこに何か起こっている必要があります。 –

答えて

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; 
+0

try {NoSuchMethoException} catch {}ブロックを置くと、NoSuchMethodExceptionのUnreachable catchブロックがコンパイラに表示されます。そしてtry {Exception} catchは単に捕まえません。 –

+0

あなたがしようとしたことを投稿できますか?あなたが言っていることは意味をなさないので、 –

+0

あなたはあなたの質問にそれを掲示できますか?、そのコメントは読むのが非常に難しくなります。 –

0

何らかの理由で「キャッチ(例外e)」を試して動作していないため場合:それはすべての例外の基底クラスですので、これは、すべての可能な例外やエラーをキャッチする必要があり

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

+4

あなたは決してそれを行うべきではありません。バグを発見するのが非常に難しくなるかもしれません。 – DerMike

+0

あなたが何をしているのか本当に分かっている場合にのみ行うべきです。 彼もできる: catch(Throwable t){ if(!(t instanceof NoSuchMethodException)){ throw t; } } –

関連する問題