2012-05-17 2 views
5

어떻게 될 수 있습니까? 써드 파티 라이브러리의 예외가 내 catch 블록을 건너 뛰고있는 것처럼 평야처럼 보입니다. 이 문제를 어디서부터 해결해야할지 확실하지 않습니다. 저도 정말 어리 석거나 예외 나 Java에 대해 미묘한 것을 이해하지 못합니다.Java 예외가 잡히지 않았습니다

내 콘솔 :

Exception: org.apache.james.mime4j.io.MaxLineLimitException: Maximum line length limit exceeded; stack: org.apache.james.mime4j.stream.MimeEntity.readRawField(MimeEntity.java:242); org.apache.james.mime4j.stream.MimeEntity.nextField(MimeEntity.java:258); org.apache.james.mime4j.stream.MimeEntity.advance(MimeEntity.java:296); org.apache.james.mime4j.stream.MimeTokenStream.next(MimeTokenStream.java:360); me.unroll.scanner.Scanner.<init>(Scanner.java:206); me.unroll.scanner.ScannerThread.run(ScannerThread.java:205); java.lang.Thread.run(Thread.java:722)

문제는 내 코드는 다음과 같습니다

try { 
//... 
for(EntityState token = messageStream.getState(); 
    token != EntityState.T_END_OF_STREAM; 
    token = messageStream.next()) { //this is Scanner.java:206 
//... 
catch(ScanComplete exc) { } 
catch(MaxLineLimitException exc) { //line 282, matches "try" above 
    debug("Am I getting caught?"); //no, it's not 

좀 더

+0

또한 ScanComplete catch 블록에 디버그 라인을 삽입하십시오. –

+4

로그 수준이'debug '가 나타나기에 충분한 지 확인하고 계십니까? –

+2

줄 283에 중단 점을 놓고 충돌이 발생하는지 확인하십시오. (디버그 라인) – MeBigFatGuy

답변

5

잘못된 예외 유형을 잡으려고 시도하고 있습니다.

MimeTokenStream.next()의 서명을 보면 MimeException을 던질 수 있으며 잡히지 않습니다. 왜 예외가 잡히지 않는지 궁금하다면 Exception을 잡아 예외 유형을 로깅하여 실제로 어떤 것을 던져 볼 수 있습니다.)

이제 실제 코드의 소스 코드를 보면 예외의 소스 라인 MimeEntity.readRawField의 242, 당신은 볼 수 있습니다 :

241  } catch (MaxLineLimitException e) { 
242   throw new MimeException(e); 
243  } 

그래서 콘솔 메시지 그 방법은 MimeException 인에 의해 실제 예외가 발생되고, MaxLineLimitException라고하더라도. 코드에 MimeException을 잡는 대신에 MaxLineLimitException을 시도해보십시오. 그러나 MimeTokenStream.next()은 아마도 당신이 만난 다른 이유 외에도 MimeException을 던질 수 있습니다.

+1

@matts가 무엇인지에 대한 부록은 아마도 "Root Cause"를보고하고 wrapped exception (MimeException)을보고하지 않는 일종의 루트 예외 처리입니다. 그건 콘솔 exeception.getCause()뿐만 아니라 예외를 보여주는 것입니다. –

1

하나의 가능성은 예외가 기록 된 것으로, 이후에 잡힌 해요 그리고 다시 던지지 않았다. 예외 자체에 중단 점을 넣고 메소드에 도달 할 때까지 거기에서 빠져 나올 수 있습니다.

1

'미천 한 변수'가 맞을 수도 있습니다. 또 다른 옵션은 잘못된 MaxLineLimitException 클래스를 가져온 것입니다.

관련 문제