2013-01-09 40 views
6

मैं कोल्डफ्यूजन 8 का उपयोग कर रहा हूं। मैं NoClassDefFoundError कोल्डफ्यूज़न में अपवाद पकड़ना चाहता हूं, हालांकि मैं नहीं कर सकता ... यह अभी भी विफल रहता है और अपवाद.लॉग फ़ाइल में त्रुटि लॉग करता है। मैंने कोशिश की है।कोल्डफ्यूजन NoClassDefFoundError को पकड़ नहीं रहा

<cftry> 
    <cfset myJavaObject.myMethod()> 
    <cfcatch type="any"> 
     <cfdump var="#cfcatch #"> 
    </cfcatch> 
    <cfcatch type="java.lang.Throwable"> 
     Horrible exception. 
     <cfdump var="#cfcatch #"> 
    </cfcatch> 
</cftry> 

लेकिन यह काम नहीं करता है। क्या आप कृपया मुझे दिखा सकते हैं कि ऐसा कैसे करें? मुझे इस त्रुटि को किसी विशेष स्थान पर पकड़ने की आवश्यकता है और मेरे आवेदन.cfc के OnError फ़ंक्शन में नहीं।

+0

'NoClassDefFoundError' एक अनियंत्रित अपवाद, आप सुनिश्चित ColdFusion उन पकड़ता हो रहा है? – fge

+0

मैंने आपके प्रश्न में 'कोल्डफ्यूजन' टैग जोड़ा है ताकि अधिक लोग इसे देख सकें। आपके पास उस कोड उदाहरण में कुछ टाइपो हैं। अंतिम 'cftry'' और पाउंड-संकेतों और चर नाम, '# cfcatch #' के बीच कोई स्थान नहीं होना चाहिए। 'किसी भी' के पकड़ प्रकार को त्रुटि मिलनी चाहिए, 'java.lang.Throwable' प्रकार के बारे में निश्चित नहीं है? –

+1

यदि आपके पास अपने पकड़ में कोई त्रुटि है तो यह सीएफ त्रुटि फेंक देगा। चूंकि मिगुएल-एफ ने कहा, यदि आपके कोड में ये रिक्त स्थान मौजूद हैं तो यह एक वाक्यविन्यास त्रुटि है और सीएफ सही ढंग से प्रतिक्रिया दे रहा है। त्रुटि हैंडलर को सही होना चाहिए या वे अनिवार्य रूप से बेकार हैं। – Travis

उत्तर

9

अब मेरे पास और कॉफी है, मुझे नहीं लगता कि cfcatchNoClassDefFoundError को पकड़ने में सक्षम है। प्रलेखन के अनुसार, यह केवल प्रक्रियाओं Exceptions:

अपवाद घटनाओं है कि एक ColdFusion पेज निर्देश के सामान्य प्रवाह को बाधित, इस तरह विफल रहा है डेटाबेस कार्यों के रूप में, याद आ रही फ़ाइलों को शामिल कर रहे हैं, और डेवलपर द्वारा निर्दिष्ट घटनाओं ।

NoClassDefFoundErrorError है।

कोई त्रुटि गंभीर समस्या है कि एक उचित आवेदन

ऐसा लगता है cfcatch केवल सामान्य "वसूली" समस्याओं को संभालने के लिए डिजाइन किया गया था पकड़ने की कोशिश नहीं करनी चाहिए इंगित करता है। NoClassDefFoundError प्राप्त करने के बाद वास्तव में आप ऐसा नहीं कर सकते हैं। यह एक गंभीर त्रुटि है और आप इसे पिछले (सामान्य परिस्थितियों में) नहीं प्राप्त कर सकते हैं। आप जितना अधिक कर सकते हैं वह एक त्रुटि संदेश दिखाता है और बाहर निकलता है।

Application.onErrorNoClassDefFoundError, साथ ही अपवादों जैसे बेकार त्रुटियों को संभालने लगता है। तो मुझे लगता है कि आप सबसे अच्छा कर सकते हैं onError लागू करें और इसे एक त्रुटि पृष्ठ प्रदर्शित करें।

<!---- test code ---> 
    <cfset myJavaObject = createObject("java", "path.to.MyClass") /> 
    <cfset myJavaObject.myMethod() /> 

    <!---- Application.cfc ---> 
    <cfcomponent> 
     .... settings ... 
     <cffunction name="onError" returnType="void"> 
      <cfargument name="Exception" required="true" /> 
      <cfargument name="EventName" type="string" required="true" /> 
      <h1>onError Test</h1> 
      <cfdump var="#Exception#" /> 
     </cffunction> 
    </cfcomponent> 

    // test class 
    public class MyClass { 
     public void myMethod() { 
      throw new NoClassDefFoundError ("Testing..."); 
     } 
    } 

अद्यतन

किसी भी प्रकार की java.lang.Exception के जावा ऑब्जेक्ट प्रकार के साथ सभी त्रुटि भी शामिल है। इसमें java.lang शामिल नहीं है। अक्षम त्रुटियां। फेंकने योग्य त्रुटियों को पकड़ने के लिए, cfcatch टैग प्रकार विशेषता

में java.lang.Throwable निर्दिष्ट क्या प्रलेखन कहते हैं के बावजूद, Throwable पकड़ने मेरी परीक्षण (या तुम्हारा) में से किसी में काम नहीं करता। यह दृढ़ता से व्यवहार या दस्तावेज़ीकरण में एक बग का सुझाव देता है। किसी भी तरह से यह विज्ञापन के रूप में काम नहीं करता है, जैसा ऊपर बताया गया है, मुझे पता है कि एकमात्र विकल्प सामान्य त्रुटि हैंडलर का उपयोग कर रहा है। आप किसी कारण के लिए एक Application.cfm फ़ाइल के साथ चिपके रहते हैं चाहिए, का उपयोग करके देखें <cferror type="exception" ...>

(बेतुका) टेस्ट मामला:

<cftry> 
    <cfset myJavaObject = createObject("java", "path.to.MyClass")> 
    <cfset myJavaObject.myMethod()> 
    <cfcatch type="java.lang.NoClassDefFoundError"> 
     CAUGHT java.lang.NoClassDefFoundError 
    </cfcatch> 
    <cfcatch type="java.lang.LinkageError"> 
     CAUGHT java.lang.LinkageError 
    </cfcatch> 
    <cfcatch type="java.lang.Error"> 
     CAUGHT java.lang.Error 
    </cfcatch> 
    <cfcatch type="java.lang.Throwable"> 
     CAUGHT java.lang.Throwable 
    </cfcatch> 
    <cfcatch type="any"> 
     CAUGHT ANY 
    </cfcatch> 
    <cfcatch> 
     CAUGHT 
    </cfcatch> 
</cftry> 
+0

+1 यह वही निष्कर्ष है कि वे दूसरे प्रश्न में आए जो मैंने संदर्भित किया (टिप्पणियों में)। मुझे यह भी नहीं लगता कि ओपी अब और ध्यान दे रहा है ... –

+0

हाँ, मैं भी उस थ्रेड पर था। पूरी तरह से भूल गए 'cfcatch' तब तक मदद नहीं करेगा जब तक कि मेरी बाकी कॉफी न हो, तब सोचा "डुह!" – Leigh

+0

मैं इस उत्तर को कोल्डफ्यूजन दस्तावेज़ के अनुसार स्वीकार नहीं कर सकता: किसी भी प्रकार में जावा ऑब्जेक्ट प्रकार java.lang.Exception के साथ सभी त्रुटि शामिल है। इसमें java.lang शामिल नहीं है। अक्षम त्रुटियां। थ्रोबल त्रुटियों को पकड़ने के लिए, java.lang निर्दिष्ट करें। Cfcatch टैग प्रकार विशेषता में सक्षम। (http://livedocs.adobe.com/coldfusion/8/htmldocs/help.html?content=Errors_05.html) – Abbadon