अब मेरे पास और कॉफी है, मुझे नहीं लगता कि cfcatchNoClassDefFoundError
को पकड़ने में सक्षम है। प्रलेखन के अनुसार, यह केवल प्रक्रियाओं Exceptions:
अपवाद घटनाओं है कि एक ColdFusion पेज निर्देश के सामान्य प्रवाह को बाधित, इस तरह विफल रहा है डेटाबेस कार्यों के रूप में, याद आ रही फ़ाइलों को शामिल कर रहे हैं, और डेवलपर द्वारा निर्दिष्ट घटनाओं ।
NoClassDefFoundError
Error है।
कोई त्रुटि गंभीर समस्या है कि एक उचित आवेदन
ऐसा लगता है cfcatch
केवल सामान्य "वसूली" समस्याओं को संभालने के लिए डिजाइन किया गया था पकड़ने की कोशिश नहीं करनी चाहिए इंगित करता है। NoClassDefFoundError
प्राप्त करने के बाद वास्तव में आप ऐसा नहीं कर सकते हैं। यह एक गंभीर त्रुटि है और आप इसे पिछले (सामान्य परिस्थितियों में) नहीं प्राप्त कर सकते हैं। आप जितना अधिक कर सकते हैं वह एक त्रुटि संदेश दिखाता है और बाहर निकलता है।
Application.onError
NoClassDefFoundError
, साथ ही अपवादों जैसे बेकार त्रुटियों को संभालने लगता है। तो मुझे लगता है कि आप सबसे अच्छा कर सकते हैं 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>
'NoClassDefFoundError' एक अनियंत्रित अपवाद, आप सुनिश्चित ColdFusion उन पकड़ता हो रहा है? – fge
मैंने आपके प्रश्न में 'कोल्डफ्यूजन' टैग जोड़ा है ताकि अधिक लोग इसे देख सकें। आपके पास उस कोड उदाहरण में कुछ टाइपो हैं। अंतिम 'cftry'' और पाउंड-संकेतों और चर नाम, '# cfcatch #' के बीच कोई स्थान नहीं होना चाहिए। 'किसी भी' के पकड़ प्रकार को त्रुटि मिलनी चाहिए, 'java.lang.Throwable' प्रकार के बारे में निश्चित नहीं है? –
यदि आपके पास अपने पकड़ में कोई त्रुटि है तो यह सीएफ त्रुटि फेंक देगा। चूंकि मिगुएल-एफ ने कहा, यदि आपके कोड में ये रिक्त स्थान मौजूद हैं तो यह एक वाक्यविन्यास त्रुटि है और सीएफ सही ढंग से प्रतिक्रिया दे रहा है। त्रुटि हैंडलर को सही होना चाहिए या वे अनिवार्य रूप से बेकार हैं। – Travis