2

Google App Engine で Jersey リンク サポートを使用できませんでした。アプリケーションにアクセスしようとすると、次の例外が発生します。

Caused by: javax.el.ELException: Could not find expression factory class
...
Caused by: java.lang.ClassNotFoundException: de.odysseus.el.ExpressionFactoryImpl

ドキュメントで指定されているように、これを web.xml の Jersey サーブレット セクションに配置します。

<init-param>
 <param-name>com.sun.jersey.spi.container.ContainerResponseFilters</param-name>
 <param-value>com.sun.jersey.server.linking.LinkFilter</param-value>
</init-param>

また、プロジェクトの WEB-INF/lib ディレクトリに jersey-server-linking-1.13.jar を追加します。

最初に el-api.jar を追加してから、juel-2.1.0.jar を WEB-INF/lib ディレクトリに追加しようとしましたが、まだこれらのエラーが発生します。

誰かがこれに対処する方法についてヒントをくれるかどうか知りたいです。Jersey リンク jar を使用しない場合、すべてが期待どおりに機能します。

4

4 に答える 4

2

私のGAEアプリでも同様の問題がありました。el-api と el-impl では問題なく動作していましたが、開発が進むにつれて de.odysseus.el.E​​xpressionFactoryImpl を要求し始めました。切り替えましたが、JUEL を pom.xml に追加すると、John Prince と同じエラー (java.security.AccessControlException) が発生しました。

GAE ユーザー向けのソリューションは、JUEL 2.2.7 を使用することです。

この記事の執筆時点では、2.2.7 は Maven Central で利用できません。しかし、あなたはそれを見つけることができます

<repository>
    <id>repo-id</id>
    <name>repo-name</name>
    <url>https://oss.sonatype.org/content/repositories/snapshots/</url>
</repository>

必要なものとリンクします

<dependency>
    <groupId>de.odysseus.juel</groupId>
    <artifactId>juel-api</artifactId>
    <version>2.2.7-SNAPSHOT</version>
</dependency>

<dependency>
    <groupId>de.odysseus.juel</groupId>
    <artifactId>juel-impl</artifactId>
    <version>2.2.7-SNAPSHOT</version>
</dependency>

<dependency>
    <groupId>de.odysseus.juel</groupId>
    <artifactId>juel-spi</artifactId>
    <version>2.2.7-SNAPSHOT</version>
</dependen

ソース: https://github.com/beckchr/juel/issues/73

于 2013-09-19T22:01:38.480 に答える
0

プロジェクトの依存関係として「juel」と「juel-impl」を追加することで問題を「解決」しました (Maven を使用しています。手動で行う場合は、それらのプロジェクトに何が含まれているかを正確に把握する必要がある場合があります)。

ただし、それを行うとすぐに、別の例外が発生し始めました。

java.security.AccessControlException: access denied (java.io.FilePermission C:\Program Files (x86)\Java\jdk1.6.0_33\jre\lib\el.properties read)
    at java.security.AccessControlContext.checkPermission(AccessControlContext.java:374)
    at java.security.AccessController.checkPermission(AccessController.java:546)
    at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
    at com.google.appengine.tools.development.DevAppServerFactory$CustomSecurityManager.checkPermission(DevAppServerFactory.java:289)
...

それはGAEの制限に違反しているためだと確信しています。

元の ClassNotFound 例外で、URLClassLoader を使用しようとしていることに気付きました。また、その問題が最終的に GAE の問題であったかどうかも疑問に思っています。

現時点では、Jersey リンクのサポートは GAE と互換性がないようです。

于 2012-10-01T20:25:14.120 に答える
0

この問題は、de.odysseus.el.E​​xpressionFactoryImpl クラスが見つからないことが原因です。あなたが言及したように、あなたがjarをWEB-INF\libフォルダーに追加したと仮定します。

Project Explorer で JAR ファイルを表示し、Eclipse で単純に展開して、追加した JAR ファイルのいずれかに de.odysseus.el.E​​xpressionFactoryImpl クラスがあるかどうかを確認することをお勧めします。

于 2012-09-12T17:50:22.760 に答える