Java 에서 Exception 의 내용을 추출하고 싶을 때 |
개발환경 : window 7 64bit, Eclipse Kepler, JDK 1.6 |
Java 에서 Exception 이 일어났을 때 콘솔에 출력하는 것 외에
따로 내용을 저장하고자 할 때 내용을 알아야 하는데
Excpetion 클래스에서 제공하는 함수들로는 알수 없다.
Apache commons 에서 제공하는 클래스 인데
org.apache.commons.lang3.exception.ExceptionUtils 이다.
위 클래스는 commons-lang3.jar 가 필요하다. 다운받을려면
아래 URL 로 가서 받으면 된다.
http://commons.apache.org/proper/commons-lang/download_lang.cgi
Eclipse 에서 Build path 로 다운받은 jar 를 추가한다.
이제 Junit Test case 클래스를 하나 만들어서 ExceptionUtils 의 각종 함수에
대해 테스트 해본다. 아래 샘플소스는 각 함수들의 값들을 로그에 찍어주는 예제이다.
테스트를 위해 Excpetion 객체를 3개 포함해서 throw 하였다.
주로 많이 사용하는 함수는 다음과 같다.
getMessage() : 제일 마지막 에러 타이틀을 출력한다.
getRootCauseMessage() : 제일마지막 에러 이전 에러 타이틀을 출력한다.
getStackTrace() : 에러의 모든 내용을 출력한다.
전체샘플소스는 다음과 같다.
@Test public final void testTrace2() { try { throw new RuntimeException("Runtime Exception!!", new Exception( "Exception!!", new Throwable("Throwable !!"))); } catch (Exception e) { System.out.println(" getMessage : " + ExceptionUtils.getMessage(e)); System.out.println(" getRootCauseMessage : " + ExceptionUtils.getRootCauseMessage(e)); System.out.println(" getThrowableCount : " + ExceptionUtils.getThrowableCount(e)); System.out.println(" getThrowables : "); for (final Throwable element : ExceptionUtils.getThrowables(e)) { System.out.println(element.getMessage()); } System.out.println(" indexOfThrowable(e,RuntimeException.class) : " + ExceptionUtils.indexOfThrowable(e, RuntimeException.class)); System.out.println(" indexOfThrowable(e,Throwable.class) : " + ExceptionUtils.indexOfThrowable(e, Throwable.class)); System.out.println(" indexOfType(e,RuntimeException.class) : " + ExceptionUtils.indexOfType(e, RuntimeException.class)); System.out.println(" indexOfType(e,Throwable.class) : " + ExceptionUtils.indexOfType(e, Throwable.class)); System.out.println(" getCause : " + ExceptionUtils.getCause(e)); System.out.println(" getRootCause : " + ExceptionUtils.getRootCause(e)); System.out.println(" getRootCauseStackTrace : "); for (final String element : ExceptionUtils.getRootCauseStackTrace(e)) { System.out.println(element); } } }
위 소스를 실행했을 때 로그에 출력되는 내용이다
getMessage : RuntimeException: Runtime Exception!! getRootCauseMessage : Throwable: Throwable !! getThrowableCount : 3 getThrowables : Runtime Exception!! Exception!! Throwable !! indexOfThrowable(e,RuntimeException.class) : 0 indexOfThrowable(e,Throwable.class) : 2 indexOfType(e,RuntimeException.class) : 0 indexOfType(e,Throwable.class) : 0 getCause : java.lang.Exception: Exception!! getRootCause : java.lang.Throwable: Throwable !! getRootCauseStackTrace : java.lang.Throwable: Throwable !! [wrapped] java.lang.Exception: Exception!! at ExcpetionTest.testTrace2(ExcpetionTest.java:24) [wrapped] java.lang.RuntimeException: Runtime Exception!! at ExcpetionTest.testTrace2(ExcpetionTest.java:23) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229) at org.junit.runners.ParentRunner.run(ParentRunner.java:309) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
'자바(JAVA)' 카테고리의 다른 글
자바(Java) AWT – Checkbox 컨트롤 사용법과 예제 (4) | 2014.11.27 |
---|---|
자바(Java) 웹페이지에 접속해서 html 소스 긁어 오기위한 방법 (2) | 2014.11.20 |
자바스크립트(javascript) 배열로 구성하여 input 객체에 넣고 POST 넘겼을때 (4) | 2014.09.18 |
웹페이지에서 구글맵 구현 (0) | 2014.02.25 |
[Java] 자바 데이터베이스 연동, 오라클(Oracle), MySQL DB 연결 테스트 (0) | 2014.02.09 |
Java 에서 날짜 더하기 (0) | 2014.02.08 |
자바 Junit 기능중 타임 아웃 테스트 하기 (0) | 2013.10.27 |
Java 단위테스트 Junit 에서 Suite 로 클래스 집합 테스트 하기 (0) | 2013.10.26 |