tohokuaikiのチラシの裏

技術的ネタとか。

Confluenceのプラグイン作成で自前のInterceptorを使うようにする

ConfluenceのXWorkによるプラグイン作成における値チェック(Validator)の方法が少なくてガッカリした - tohokuaikiのチラシの裏とか書いたけど、自前のInterceptorを追加できればいいわけで。

で、この記事がピッタリ参考になった。

Can we expand interceptor-stack from Confluence plugin? - Atlassian Answers

そう、自分も

<package name="example" extends="default" namespace="/example">
   <interceptors>
        <interceptor name="timer" class=".."/>
        <interceptor name="logger" class=".."/>
        <interceptor-stack name="myStack">
           <interceptor-ref name="timer"/>

と書いてた。でも、これはロードされなかった。何故だ!と思ったら
confluence-project/confluence-core/confluence/src/java/com/atlassian/confluence/plugin/descriptor/XWorkModuleDescriptor.java
で、"interceptors"タグを拾ってる箇所が無かったという・・・。

そこで、先述の記事の方は

<package name="example" extends="default" namespace="/example">
    <interceptor name="exampleInterceptor" class="com.confluence.plugin.ExampleInterceptor"/>
    <interceptor-stack name="exampleStack">
	<interceptor-ref name="exampleInterceptor"/>
	<interceptor-ref name="defaultStack"/>
    </interceptor-stack>
    <action name="login" class="tutuorial.Login">
	<interceptor-ref name="exampleStack"/>

と"interceptors"のラップを解除したらきちんとExampleIntercepterが動いたという。
確かに動いた。試したInterceptorはこんな感じ。

package jp.junoe.confluence.plugins.foo.sample;

import com.opensymphony.xwork.ActionInvocation;
import com.opensymphony.xwork.interceptor.AbstractLifecycleInterceptor;

public class ExampleInterceptor extends AbstractLifecycleInterceptor
{
    public String intercept(ActionInvocation invocation) throws Exception{
        System.out.println("intercept処理");
        
        String result_code = invocation.invoke();
        
        System.out.println(result_code);
        
        return result_code;
    }
}

で、こっからどうするの・・・?

ここでFormの値をフィルタリングしたり、バリデートしたりしたいんだけど・・・・。