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に、以下の記述を追加することで、可能である。
特記事項:
このクラスは、JXPathIntrospectorのprivate staticフィールドにアクセスするため、
セキュリティマネージャを設定している場合には、
privateフィールドへのアクセス権(java.lang.reflect.ReflectPermissionのsuppressAccessChecks)を付与する必要がある。
なお、privateフィールドアクセスは特権モードで実行する(呼び出し元のクラスの権限が低い場合でも、このクラスに与えられた権限で実行する)ため、
アクセス権の付与対象を絞りたい場合は、以下の例のように、
このクラスを含むjarファイルのみに限定してprivateフィールドへのアクセス権を付与すればよい。
(アクセス権の付与対象を絞る必要が無い場合は、「codeBase "file:〜"」の部分を省略する。)
セキュリティマネージャが有効かつ権限不足でパッチをアクティベートできなかった場合や、
commons-JXPath-1.3とはJXPathIntrospectorの実装が異なるバージョンのcommons-JXPathを使用するなどして
パッチをアクティベートできなかった場合には、FATALログを出力する。
ただし、Errorが発生しない限り、パッチをアクティベートできなくても、例外はスローしない。
したがって、Errorが発生する場合を除き、パッチをアクティベートできなかった場合、パッチが当たっていない状態でアプリケーションを継続する。
- 関連項目:
HashMapForJXPathIntrospector
クラス java.lang.Object から継承されたメソッド |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
JXPATH152PatchActivator
public JXPATH152PatchActivator()
Copyright © 2012. All Rights Reserved.