Class MethodBinding<TData,TResult>

java.lang.Object
nablarch.fw.handler.MethodBinding<TData,TResult>
Type Parameters:
TData - 入力データの型
TResult - 結果データの型
All Implemented Interfaces:
Handler<TData,TResult>, HandlerWrapper<TData,TResult>
Direct Known Subclasses:
HttpMethodBinding, RecordTypeBinding

public abstract class MethodBinding<TData,TResult> extends Object implements HandlerWrapper<TData,TResult>
メソッドレベルのディスパッチ機能を実装する際に継承する抽象基底クラス。
Author:
Iwauo Tajima
  • Field Details

    • SCOPE_VAR_NAME_BOUND_CLASS

      public static final String SCOPE_VAR_NAME_BOUND_CLASS
      ディスパッチ先の Class オブジェクトをリクエストスコープに保存するときのキー名。
      See Also:
    • SCOPE_VAR_NAME_BOUND_METHOD

      public static final String SCOPE_VAR_NAME_BOUND_METHOD
      ディスパッチ先の Method オブジェクトをリクエストスコープに保存するときのキー名。
      See Also:
  • Constructor Details

    • MethodBinding

      public MethodBinding(Object delegate)
      コンストラクタ。
      Parameters:
      delegate - 委譲対象となるオブジェクト
  • Method Details

    • getMethodBoundTo

      protected abstract Method getMethodBoundTo(TData data, ExecutionContext ctx)
      入力データおよび実行コンテキストの内容に応じて、委譲対象のメソッドを決定する。
      Parameters:
      data - 入力データ
      ctx - 実行コンテキスト
      Returns:
      委譲対象メソッド
    • getHandleMethod

      protected Method getHandleMethod(String name)
      委譲対象オブジェクトのメソッドの中から、与えられたメソッド名をもち、 かつ、Handler.handle() メソッドと互換なシグニチャを持てばtrueを返す。 すなわち、以下の条件を満たすメソッドを返す。
         1. 引数で渡された文字列と同じメソッド名をもつ。(大文字小文字は同一視)
         2. メソッドの修飾子がパブリックかつ非スタティックである。
         3. 引数を2つもち、第2引数の型がExecutionContextである。
       
      なお、該当するメソッドが存在しなかった場合はnullを返す。
      Parameters:
      name - 委譲対象となるメソッド名
      Returns:
      委譲対象となるメソッド (該当するメソッドが存在しなかった場合はnull)
    • handle

      public TResult handle(TData req, ExecutionContext ctx) throws Result.NotFound
      getMethodBoundTo() で取得したメソッドに対して後続処理を委譲し、 その結果を返す。
      Specified by:
      handle in interface Handler<TData,TResult>
      Parameters:
      req - 入力オブジェクト
      ctx - 実行コンテキスト
      Returns:
      処理結果オブジェクト
      Throws:
      Result.NotFound - 入力データに対応するメソッドが存在しない場合。
    • saveBoundClassAndMethodToRequestScope

      protected void saveBoundClassAndMethodToRequestScope(ExecutionContext context, Class<?> clazz, Method method)
      ディスパッチ先のクラスとメソッドをリクエストスコープに記録する。
      Parameters:
      context - コンテキスト
      clazz - 委譲先のクラス
      method - 委譲先のメソッド
    • getDelegates

      public List<Object> getDelegates(TData data, ExecutionContext context)
      このラッパーが処理を移譲するオブジェクトのリストを返す。 対象となるオブジェクトが存在しない場合は空の配列を返す。
      Specified by:
      getDelegates in interface HandlerWrapper<TData,TResult>
      Parameters:
      data - ハンドラに対する入力データ
      context - 実行コンテキスト
      Returns:
      内包するオブジェクト。
    • qualifiesAsHandler

      protected boolean qualifiesAsHandler(Method method)
      与えられたメソッドがhandle()メソッドと互換なシグニチャを持てばtrueを返す。
      Parameters:
      method - 検証対象のメソッド
      Returns:
      与えられたメソッドのシグニチャがhandle()と互換ならtrue。