私はもっとコーヒーを持っていたので、cfcatchはNoClassDefFoundError
を捕まえることができるとは思いません。文書によると、それだけで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オブジェクトタイプのすべてのエラーを含みます。 java.lang.Throwableエラーは含まれません。 は、Throwableのエラーをキャッチ私のテスト(またはあなた)のいずれかで動作しませんThrowable
を引く、ドキュメントが言うにもかかわらずのcfcatch タグのtype属性
でのjava.lang.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
あなたの質問に 'ColdFusion'タグを追加しましたので、もっと多くの人がそれを見ることができます。このコード例にはいくつかのタイプミスがあります。 'cftry'の終わりには、ポンド記号と変数名の間にスペースがあってはなりません、'#cfcatch# '。キャッチタイプが「any」の場合、java.lang.Throwableタイプについては不明なエラーが発生するはずです。 –
キャッチにエラーがあると、CFエラーがスローされます。 Miguel-F氏によると、あなたのコードにこれらのスペースが存在する場合、構文エラーであり、CFが正しく反応しています。エラーハンドラは完璧でなければならず、または本質的に役に立たない。 – Travis