10.3. カスタムハンドラーの作成
カスタムハンドラーを定義する方法は 2 つあります。
WEB-INF/jboss-web.xml ファイルを使用したカスタムハンドラーの定義
カスタムハンドラーは WEB-INF/jboss-web.xml
ファイルで定義できます。
例: WEB-INF/jboss-web.xml
でのカスタマーハンドラーの定義
<jboss-web> <http-handler> <class-name>org.jboss.example.MyHttpHandler</class-name> </http-handler> </jboss-web>
例: HttpHandler
クラス
package org.jboss.example; import io.undertow.server.HttpHandler; import io.undertow.server.HttpServerExchange; public class MyHttpHandler implements HttpHandler { private HttpHandler next; public MyHttpHandler(HttpHandler next) { this.next = next; } public void handleRequest(HttpServerExchange exchange) throws Exception { // do something next.handleRequest(exchange); } }
WEB-INF/jboss-web.xml
ファイルを使用して、カスタムハンドラーにパラメーターを設定することもできます。
例: WEB-INF/jboss-web.xml
でのパラメーターの定義
<jboss-web> <http-handler> <class-name>org.jboss.example.MyHttpHandler</class-name> <param> <param-name>myParam</param-name> <param-value>foobar</param-value> </param> </http-handler> </jboss-web>
これらのパラメーターが機能するには、ハンドラークラスに対応するセッターが必要です。
例: ハンドラーでのセッターメソッドの定義
package org.jboss.example; import io.undertow.server.HttpHandler; import io.undertow.server.HttpServerExchange; public class MyHttpHandler implements HttpHandler { private HttpHandler next; private String myParam; public MyHttpHandler(HttpHandler next) { this.next = next; } public void setMyParam(String myParam) { this.myParam = myParam; } public void handleRequest(HttpServerExchange exchange) throws Exception { // do something, use myParam next.handleRequest(exchange); } }
WEB-INF/undertow-handlers.conf ファイルでのカスタムハンドラーの定義
ハンドラーの定義に WEB-INF/jboss-web.xml
を使用する代わりに、ハンドラーは WEB-INF/undertow-handlers.conf
ファイルで定義することもできます。
myHttpHandler(myParam='foobar')
WEB-INF/undertow-handlers.conf
で定義されたハンドラーが機能するには、以下の 2 つのものを作成する必要があります。
HandlerWrapper
にラップされたHandlerBuilder
(undertow-handlers.conf
向けの対応する構文を定義し、HttpHandler
を作成します)。例:
HandlerBuilder
クラスpackage org.jboss.example; import io.undertow.server.HandlerWrapper; import io.undertow.server.HttpHandler; import io.undertow.server.handlers.builder.HandlerBuilder; import java.util.Collections; import java.util.Map; import java.util.Set; public class MyHandlerBuilder implements HandlerBuilder { public String name() { return "myHttpHandler"; } public Map<String, Class<?>> parameters() { return Collections.<String, Class<?>>singletonMap("myParam", String.class); } public Set<String> requiredParameters() { return Collections.emptySet(); } public String defaultParameter() { return null; } public HandlerWrapper build(final Map<String, Object> config) { return new HandlerWrapper() { public HttpHandler wrap(HttpHandler handler) { MyHttpHandler result = new MyHttpHandler(handler); result.setMyParam((String) config.get("myParam")); return result; } }; } }
ファイルのエントリー。
META-INF/services/io.undertow.server.handlers.builder.HandlerBuilder
.このファイルはクラスパス上である必要があります (例:WEB-INF/classes
)。org.jboss.example.MyHandlerBuilder