2012-05-17 13 views
5

यह कैसे हो सकता है? ऐसा लगता है कि डेलाइट के रूप में सादा दिखता है किसी तृतीय पक्ष लाइब्रेरी से अपवाद मेरे कैच ब्लॉक को छोड़ रहा है। सुनिश्चित नहीं है कि यह समस्या निवारण कहां शुरू करें। यह या तो मैं वास्तव में बेवकूफ हूं, या मुझे अपवादों और जावा के बारे में कुछ सूक्ष्म समझ नहीं आ रहा है।जावा अपवाद पकड़ा नहीं जा रहा

मेरे कंसोल:

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

स्कैनकंपलेट कैच ब्लॉक में एक डीबग लाइन भी डालें। –

+4

क्या आप सुनिश्चित हैं कि लॉग स्तर 'डीबग' दिखाने के लिए पर्याप्त है? –

+2

लाइन 283 पर ब्रेक पॉइंट डालें और देखें कि यह हिट हो जाता है या नहीं। (डीबग लाइन) – MeBigFatGuy

उत्तर

5

आप गलत अपवाद प्रकार को पकड़ने का प्रयास कर रहे हैं।

MimeTokenStream.next() के लिए हस्ताक्षर का कहना है कि यह MimeException फेंक सकता है, जिसे आप पकड़ नहीं रहे हैं। (बीटीडब्ल्यू अगर आप सोच रहे हैं कि एक अपवाद क्यों नहीं पकड़ा जा रहा है, तो आप Exception को पकड़ने और वास्तव में क्या फेंक रहे हैं यह देखने के लिए अपवाद प्रकार को लॉगिंग करने का प्रयास कर सकते हैं।)

अब, यदि आप वास्तविक के लिए स्रोत कोड देखते हैं अपवाद के स्रोत, लाइन MimeEntity.readRawField की 242, आप देखेंगे:

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

तो भले ही सांत्वना संदेश MaxLineLimitException कहते हैं, वास्तविक अपवाद को उठाकर फेंका जाता है कि विधि एक MimeException है। MaxLineLimitException के बजाय अपने कोड में MimeException को पकड़ने का प्रयास करें, लेकिन सावधान रहें कि MimeTokenStream.next() शायद आपके सामने आने वाले अन्य कारणों के लिए MimeException फेंक सकता है।

+1

@ मेट्सट्स के लिए एक अनुपूरक यह है कि शायद रूट अपवाद हैंडलिंग का कुछ प्रकार है जहां यह "रूट कारण" की रिपोर्ट करता है, न कि लपेटा हुआ अपवाद (MimeException)। यही कंसोल exeception दिखा रहा है .getCause() सिर्फ अपवाद नहीं। –

1

एक संभावना यह है कि अपवाद लॉग इन किया गया था, बाद में पकड़ा है कर रहा हूँ और पुनर्स्थापित नहीं किया। आप अपवाद पर ब्रेकपॉइंट डाल सकते हैं और जब तक आप अपनी विधि तक नहीं पहुंच जाते तब तक वहां से बाहर निकल सकते हैं।

1

'दुखी परिवर्तनीय' शायद सही है। एक और विकल्प यह है कि आपके पास गलत MaxLineLimitException वर्ग आयात किया गया है।

संबंधित मुद्दे