ページ

2011年6月23日

tomcat7のEL式でsomeObj.class.name eq "soma.classname"でエラー

Tomcat7がでてしばらくたつので、そろそろ安定し始めるころかと思います。と言っても、実際に安定しているかどうかはともかく、そう信じ込みたいころです。もっと言えば、今から検討し始めるので、半年後に安定していればいいのですが・・・。ちなみに、僕はJavaはあんまり好きじゃない上に、ばかでかいTomcatとよりコンパクトなJettyを推しているのですが、会社の「いわがが」こと、id:kirisにjettyの検討をお願いしてもう、二年近くたちます。彼の知り合いの人は、是非「仕事をちゃんとするように」としかってあげてください。

どうでもよい前置きはこのぐらいにして、Tomcat7で会社の製品を動かすとJSPのEL式でsomaObj.class.nameとオブジェクトのクラス名を取得しようとしているところでエラーがでます。一言でいうと、会社の製品が全く動きません。ログには、

org.apache.jasper.JasperException: /WEB-INF/jsp/some.jsp (line: 4, column: 509) "${someObj.class.name eq 'java.lang.String'}" は無効な式を含んでいます: javax.el.ELException: The identifier [class] is not a valid Java identifier as required by section 1.19 of the EL specification (Identifier ::= Java language identifier). This check can be disabled by setting the system property org.apache.el.parser.SKIP_IDENTIFIER_CHECK to true.

と出ています。ログを見れば対処方法がわかりますが、org.apache.el.parser.SKIP_IDENTIFIER_CHECKをtrueにして起動すればいいようです。以前のバージョンのTomcat6ではこの値がtrueになっていて、デフォルト値が変わったらしいです。経緯はしりませんが、パフォーマンスかセキュリティの事情なんでしょう。

ということで、linuxとかmacであれば、

CATALINA_OPTS="-Dorg.apache.el.parser.SKIP_IDENTIFIER_CHECK=true"
export CATALINA_OPTS
./catalina.sh run

で動きます。Windowsは知りません。

0 件のコメント: