jp.terasoluna.fw.beans.jxpath
クラス JXPATH152PatchActivator

java.lang.Object
  上位を拡張 jp.terasoluna.fw.beans.jxpath.JXPATH152PatchActivator

public class JXPATH152PatchActivator
extends Object

commons-JXPathのバグ(JXPATH-152)用パッチをアクティベートするクラス。

クラスロードのタイミングで、 JXPathIntrospectorの、問題を抱えているprivate staticフィールド(byClass, byInterface)内のHashMapを パッチオブジェクト(HashMapForJXPathIntrospector)に差し替える。

このアクティベータを使用するには、アプリケーション起動時に、このクラスをロードする(ロードされていないときにロードする)必要がある。
applicationContext.xmlに、以下の記述を追加することで、可能である。

applicationContext.xml <bean id="jxpathPatchActivator" class="jp.terasoluna.fw.beans.jxpath.JXPATH152PatchActivator"/>

特記事項:
このクラスは、JXPathIntrospectorのprivate staticフィールドにアクセスするため、 セキュリティマネージャを設定している場合には、 privateフィールドへのアクセス権(java.lang.reflect.ReflectPermissionのsuppressAccessChecks)を付与する必要がある。
なお、privateフィールドアクセスは特権モードで実行する(呼び出し元のクラスの権限が低い場合でも、このクラスに与えられた権限で実行する)ため、 アクセス権の付与対象を絞りたい場合は、以下の例のように、 このクラスを含むjarファイルのみに限定してprivateフィールドへのアクセス権を付与すればよい。

セキュリティポリシーファイルの設定例(Tomcatの例)
 grant codeBase "file:${catalina.home}/webapps/<ContextRoot>/WEB-INF/lib/<このクラスを含むjarファイル名>" {
     permission java.lang.reflect.ReflectPermission "suppressAccessChecks";
 };
 
(アクセス権の付与対象を絞る必要が無い場合は、「codeBase "file:〜"」の部分を省略する。)
セキュリティマネージャが有効かつ権限不足でパッチをアクティベートできなかった場合や、 commons-JXPath-1.3とはJXPathIntrospectorの実装が異なるバージョンのcommons-JXPathを使用するなどして パッチをアクティベートできなかった場合には、FATALログを出力する。
ただし、Errorが発生しない限り、パッチをアクティベートできなくても、例外はスローしない。
したがって、Errorが発生する場合を除き、パッチをアクティベートできなかった場合、パッチが当たっていない状態でアプリケーションを継続する。

関連項目:
HashMapForJXPathIntrospector

コンストラクタの概要
JXPATH152PatchActivator()
           
 
メソッドの概要
 
クラス java.lang.Object から継承されたメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

コンストラクタの詳細

JXPATH152PatchActivator

public JXPATH152PatchActivator()


Copyright © 2012. All Rights Reserved.