2012-03-10 3 views
2

XML 파일을 포함하는 직렬화를 시도하고 있습니다.NoSuchMethodException을 잡는 방법

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

이 XML 파일은 모든 object.It위한 방법을 포함하지 않는 경우는, NoSuchMethodException @ readObject를 던졌습니다 : 같은 코드 조각이 보인다.

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) at java.beans.invokeMethod (Statement.java:127) at java.beans.Expression.getValue (Expression.java:67) at java.beans.XMLDecoder $ SAXHandler.executeCommon (XMLDecoder.java:392) java.beans.XMLDecoder $ SAXHandler.execute (XMLD $ SAXHandler.endElement (XMLDecoder.java:286) at org.apache.xerces.parsers.AbstractSAXParser.endElement (알 수없는 소스) at org.apache.xerces.impl .XMLDocumentFragmentScannerImpl.scanEndElement org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument (알 소스) 에서 org.apache.xerces.impl.XMLDocumentFragmentScannerImpl $ FragmentContentDispatcher.dispatch (알 소스) 에서 (알 소스) 에서 조직 .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 (알 소스)에서 t 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; 

여기에 오류가

<?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'을 던지도록 선언되지 않았기 때문에 자바가 발생하지 않을 것이라고 생각하지 않으므로'NoSuchMethodException' 이후에 기본 예외 블록을 추가해보십시오. 나는 그것을 아래 나의 포스트에 추가 할 것이다. –

+0

게시하지 않은 다른 코드가있을 수 있습니다. 오류 메시지에 따르면'readObject()'는 예외의 근본 원인이 아니므로 다른 명령문에서 가져와야합니다. –

+0

XML 버전의 serialize 된 객체를 게시 할 수 있습니까? 거기에 뭔가가 일어나야 만합니다. –

답변

3

왜 당신이 예외를 잡을 수 없어 같은

XML 보인다. "이 예외는 try 문 본체에서 발생하지 않습니다 경우, NoSuchMethodException에 도달 할 수없는 catch 블록"입니다 ?

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에 대한 도달 할 수없는 catch 블록을 표시합니다. 그리고 try {Exception} catch는 단순히 catch하지 않습니다. –

+0

당신이 시도한 것을 게시 할 수 있습니까? 당신이 말하는 말이 의미가 없기 때문에 –

+0

질문에 게시 할 수 있습니까?, 주석으로 인해 읽기가 매우 어렵습니다. –

0

어떤 이유로 "캐치 (예외 전자)"의 경우 작동하지 않는 시도는 : 그것은 모든 예외의 기본 클래스이기 때문에

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

이 가능한 모든 예외와 오류를 잡을 것이다.

+4

절대 그렇게해서는 안됩니다. 버그를 찾기가 매우 어려울 수 있습니다. – DerMike

+0

당신이하고있는 일을 정말로 아는 경우에만해야합니다. 그는 다음과 같이 할 수도 있습니다. catch (Throwable t) { if (! (t instanceof NoSuchMethodException)) { throw t; } } –