nablarch.fw.handler
クラス RequestPathJavaPackageMapping

java.lang.Object
  上位を拡張 nablarch.fw.handler.DispatchHandler<nablarch.fw.Request<?>,java.lang.Object,RequestPathJavaPackageMapping>
      上位を拡張 nablarch.fw.handler.RequestPathJavaPackageMapping
すべての実装されたインタフェース:
nablarch.fw.Handler<nablarch.fw.Request<?>,java.lang.Object>

public class RequestPathJavaPackageMapping
extends DispatchHandler<nablarch.fw.Request<?>,java.lang.Object,RequestPathJavaPackageMapping>

リクエストパスをJavaパッケージへマッピングすることで動的に委譲先ハンドラを決定するディスパッチハンドラ。

マッピング先Javaパッケージは、本ハンドラの basePackage プロパティに設定する。

リクエストパスを単一のJavaパッケージにマッピングする場合の設定例を以下に示す。

本ハンドラの basePackage プロパティ リクエストパス 委譲先のハンドラクラス
nablarch.sample.apps /admin/AdminApp nablarch.sample.apps.admin.AdminApp
/user/UserApp nablarch.sample.apps.user.UserApp

委譲先のクラスが存在しない、もしくは、クラスが存在してもハンドラインターフェース Handler を実装していない場合は、 汎用例外 Result.NotFound が送出される。

ベースパスの指定

マッピング元となるリクエストパスのプレフィックスのことを「ベースパス」と呼ぶ。ベースパスは basePath プロパティ に設定する。

ベースパスには、画面オンライン処理におけるコンテキストルートを設定することを想定している。 (※画面オンライン処理では、実際にはハンドラとしてHttpRequestJavaPackageMappingを使用するが、 実際にディスパッチ処理を行なっているのは、nablarch.fw.web.handler.HttpRequestJavaPackageMappingから処理を委譲される本ハンドラである)

マッピング処理を行う際には、リクエストパス中のベースパス部分の文字列を削除した上で、マッピング先Javaパッケージへとマッピングする。
以下に、画面オンライン処理でベースパスを指定し、リクエストパスを単一のJavaパッケージにマッピングする場合の設定例を示す。

本ハンドラの basePath プロパティ 本ハンドラの basePackage プロパティ リクエストパス 委譲先のハンドラクラス
/webapp/sample nablarch.sample.apps /webapp/sample/admin/AdminApp nablarch.sample.apps.admin.AdminApp
nablarch.sample.apps /webapp/sample/user/UserApp nablarch.sample.apps.user.UserApp

なお、ベースパスが指定されていて、かつリクエストパスがそのベースパスに合致しない場合は、汎用例外 Result.NotFound が送出される。

リクエストパスごとのマッピング先Javaパッケージの切り替え

optionalPackageMappingEntries プロパティに設定を行うことで、リクエストパスごとにマッピング先Javaパッケージを切り替えることができる。

optionalPackageMappingEntries プロパティには、リクエストパスのパターン(requestPattern プロパティ)とマッピング先Javaパッケージ(basePackage プロパティ)の組み合わせを設定する。
optionalPackageMappingEntries プロパティに設定した順番にリクエストパスのパターンとリクエストパスとのマッチングが行われ、 最初にマッチしたマッピング先Javaパッケージが使用される。 マッチするものが存在しない場合、本ハンドラの basePackage プロパティに設定したマッピング先Javaパッケージが使用される。

以下に、リクエストパスごとにマッピング先Javaパッケージを切り替える場合の設定例を示す。

optionalPackageMappingEntriesの requestPattern プロパティ optionalPackageMappingEntriesの basePackage プロパティ リクエストパス 委譲先のハンドラクラス
/admin// nablarch.app1 /admin/AdminApp nablarch.app1.admin.AdminApp
/user// nablarch.app2 /user/UserApp nablarch.app2.user.UserApp

リクエストパスのパターンのマッチングは、リクエストパス中のすべてのドット(.)をスラッシュ(/)に置換してから行う。 この仕様は、Nablarch のバッチ処理で過去に使用していたドット区切りのリクエストパス(例: ss01A001.B01AA001Action/B01AA0010)との互換性を保つために存在している。

リクエストパスのパターンの記法についての詳細はRequestPathMatchingHelperを参照すること。

関連項目:
Request.getRequestPath(), RequestPathMatchingHelper

コンストラクタの概要
RequestPathJavaPackageMapping()
          デフォルトコンストラクタ。
RequestPathJavaPackageMapping(java.lang.String basePath, java.lang.String basePackage)
          リクエストパスが、basePathで始まるリクエストを、basePackageで指定された Javaパッケージ配下のリクエストハンドラに委譲するディスパッチャを作成する。
 
メソッドの概要
protected  java.lang.String getBasePackage(nablarch.fw.Request<?> req, nablarch.fw.ExecutionContext ctx)
          マッピング先Javaパッケージを取得する。
protected  java.lang.Class<?> getHandlerClass(nablarch.fw.Request<?> req, nablarch.fw.ExecutionContext ctx)
          処理を委譲するハンドラの型を決定する。
 RequestPathJavaPackageMapping setBasePackage(java.lang.String basePackage)
          マッピング先Javaパッケージを設定する。
 RequestPathJavaPackageMapping setBasePath(java.lang.String basePath)
          マッピング元ベースパスを設定する。
 RequestPathJavaPackageMapping setClassNamePrefix(java.lang.String prefix)
          委譲対象クラス名の接頭辞となる文字列を設定する。
 RequestPathJavaPackageMapping setClassNameSuffix(java.lang.String suffix)
          委譲対象クラス名の接尾辞となる文字列を設定する。
 RequestPathJavaPackageMapping setOptionalPackageMappingEntries(java.util.List<JavaPackageMappingEntry> optionalPackageMappingEntries)
          RequestHandlerEntryでリクエストパスに合致したマッピング先Javaパッケージを上書きする場合に使用する、JavaPackageMappingEntryのリストを設定する。
 
クラス nablarch.fw.handler.DispatchHandler から継承されたメソッド
createHandlerFor, handle, setImmediate, writeDispatchingClassLog
 
クラス java.lang.Object から継承されたメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

コンストラクタの詳細

RequestPathJavaPackageMapping

public RequestPathJavaPackageMapping()
デフォルトコンストラクタ。

このメソッドの処理は次のコードと同等である。

   new RequestPathJavaPackageMapping("", "");
 


RequestPathJavaPackageMapping

public RequestPathJavaPackageMapping(java.lang.String basePath,
                                     java.lang.String basePackage)
リクエストパスが、basePathで始まるリクエストを、basePackageで指定された Javaパッケージ配下のリクエストハンドラに委譲するディスパッチャを作成する。

パラメータ:
basePath - マッピング元ベースURI
basePackage - マッピング先Javaパッケージ
メソッドの詳細

getHandlerClass

protected java.lang.Class<?> getHandlerClass(nablarch.fw.Request<?> req,
                                             nablarch.fw.ExecutionContext ctx)
                                      throws java.lang.ClassNotFoundException
処理を委譲するハンドラの型を決定する。 このクラスの実装では、ベースパスとベースパッケージの設定をもとに算出した完全修飾名に一致するリクエストハンドラに対して処理を委譲する。 正確な仕様は以下の通り。

委譲先のクラス(完全修飾名)の決定は以下の規則に従う。

   1. basePackage の ”.” を ”/” に置換する。
   2. リクエストパスの先頭から basePath と一致する部分を basePackage
      に置換する。
   3. 2.の結果文字列を”/”で分割する。
      分割後の各トークンの内、英大文字で始まっているものを委譲先の
      クラス名とし、それ以前の各トークンをパッケージ名とみなす。
   4. コンテキストクラスパス上に上記のパッケージ及びクラスが実際に
      存在していれば、そのクラスを委譲対象とする。
 
以下の場合、共通例外Result.NotFoundを送出する。
   - ベースパス外からのアクセスであった場合。
   - 委譲先のクラスが決定できない、決定できても存在しない場合。
   - 委譲先のクラスがHandlerインターフェースを実装していない場合。
 

定義:
クラス DispatchHandler<nablarch.fw.Request<?>,java.lang.Object,RequestPathJavaPackageMapping> 内の getHandlerClass
パラメータ:
req - 入力データ
ctx - 実行コンテキスト
戻り値:
処理を委譲するハンドラ
例外:
java.lang.ClassNotFoundException - 指定されたクラスが存在しなかった場合。

getBasePackage

protected java.lang.String getBasePackage(nablarch.fw.Request<?> req,
                                          nablarch.fw.ExecutionContext ctx)
マッピング先Javaパッケージを取得する。

optionalPackageMappingEntries プロパティに設定した順番にリクエストパスのパターンとリクエストパスとのマッチングが行われ、 最初にマッチしたJavaパッケージが使用される。
マッチするものが存在しない場合、またはoptionalPackageMappingEntries プロパティ自体が設定されていない場合、本ハンドラのbasePackage プロパティに設定したJavaパッケージが使用される。

パラメータ:
req - 入力データ
ctx - 実行コンテキスト
戻り値:
マッピング先Javaパッケージ

setBasePath

public RequestPathJavaPackageMapping setBasePath(java.lang.String basePath)
マッピング元ベースパスを設定する。

パラメータ:
basePath - マッピング元ベースパス
戻り値:
JavaPackageMapping

setBasePackage

public RequestPathJavaPackageMapping setBasePackage(java.lang.String basePackage)
マッピング先Javaパッケージを設定する。

パラメータ:
basePackage - マッピング先Javaパッケージ
戻り値:
JavaPackageMapping

setOptionalPackageMappingEntries

public RequestPathJavaPackageMapping setOptionalPackageMappingEntries(java.util.List<JavaPackageMappingEntry> optionalPackageMappingEntries)
RequestHandlerEntryでリクエストパスに合致したマッピング先Javaパッケージを上書きする場合に使用する、JavaPackageMappingEntryのリストを設定する。

パラメータ:
optionalPackageMappingEntries - JavaPackageMappingEntryのリスト
戻り値:
このオブジェクト自体

setClassNamePrefix

public RequestPathJavaPackageMapping setClassNamePrefix(java.lang.String prefix)
委譲対象クラス名の接頭辞となる文字列を設定する。

パラメータ:
prefix - 委譲対象クラス名の接頭辞となる文字列
戻り値:
このオブジェクト自体

setClassNameSuffix

public RequestPathJavaPackageMapping setClassNameSuffix(java.lang.String suffix)
委譲対象クラス名の接尾辞となる文字列を設定する。

パラメータ:
suffix - 委譲対象クラス名の接尾辞となる文字列
戻り値:
このオブジェクト自体