JAX-RSをやってみる (20) - SecurityEntityFiltering -

2014-10-23T00:00:00+00:00 Java JAX-RS

参考: https://jersey.java.net/documentation/latest/entity-filtering.html#ef.security.annotations

Entity Filtering機能を使えば出力されるエンティティのデータ等?をフィルタリングできるらしい。一番わかりやすいパターンとして言えば、ログインしているユーザーが持つ権限に応じて出力されては困るデータ等をフィルタリングすることにより出力させないようにする事が可能になる感じ(他にも@EntityFilteringアノテーションを使ってフィルタリングする事自体も可能)

という事でやってみた

JAX-RSをやってみる (19) - OAuth1Providerを実装する -

2014-10-19T00:00:00+00:00 Java JAX-RS Ruby

以前やった「JAX-RSをやってみる (18) – OAuth1Provider -」のだと、jersey-oauthに含まれているDefaultOAuth1Providerを使ってるので、アクセストークンなどはインスタンス上で管理されるはずなのでサーバーダウンしたりするとアクセストークンなどが失効するのではないかと思われる。まぁ要はDefaultOAuth1Providerのようなのをつくればいいだけなので、OAuth1Providerを実装することでできるのでやってみた

※前回の「gradle jettyでJDBCRealm」の設定が別途で必要になるのでそれも前提となる

JAX-RSをやってみる (18) - OAuth1Provider -

2014-10-08T00:00:00+00:00 Java JAX-RS Ruby

公式ドキュメント: https://jersey.java.net/documentation/latest/security.html#d0e11010

参考: https://github.com/jersey/jersey/blob/master/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/oauth/OAuthClientServerTest.java

※暫定なので大幅修正する可能性あり

org.glassfish.jersey.securityのoaut1-serverパッケージを使えばOAuth1Providerが使えるようになる模様。っていう事でやってみた

JAX-RSをやってみる (17) - SecurityContext -

2014-10-06T00:00:00+00:00 Java JAX-RS

公式ドキュメント: https://jersey.java.net/documentation/latest/security.html

サーブレットシステムとかで使われるようなPrincipalを使ったセキュリティロールをアノテーションで補助する機能を持つような感じかと。言ってる事わかりづらいと思うのでさっさと本題に入る

arquillian-managed

2014-09-15T00:00:00+00:00 Java JAX-RS

今回で3回のarquillianネタとして、今までをまとめると

  • arquillian-embeddedで組み込みのサーバーを使ってテスト
  • arquillian-remoteで外部のサーバーを利用してテスト

っていう感じなのでだけど、ローカルにあるサーバーとかを使ってテスト出来る仕組み的なのがarquillian-managedに相当するのではないかと。という事でやってみた

JAX-RS+CDIをArquillianでテスト

2014-09-08T00:00:00+00:00 Java JAX-RS

公式ドキュメント: http://arquillian.org/guides/getting_started_ja/

参考: Arquillianでインテグレーションテスト最初の第一歩

タイトル通り、JAX-RS+CDIなのをArquillianでテストしてみようっていうネタ

JAX-RSをやってみる (16) - ParamConverter -

2014-08-16T00:00:00+00:00 Java JAX-RS

参考: http://backpaper0.github.io/2013/07/17/jaxrs_parameter.html

「JAX-RSをやってみる (1)」にも書いてるけど、引数等の型変換の仕組みはfromStringもしくはvalueOfメソッドを定義する事でも可能なのだけどParamConverterっていう仕組みもあるっぽい。という事で使ってみた

JAX-RSをやってみる (15) - ForcedAutoDiscoverable -

2014-07-16T00:00:00+00:00 Java JAX-RS

以前にJAX-RSをやってみる (3) – AutoDiscoverable -っていうので

AutoDiscoverableっていうのを使う事で外部ライブラリで定義されたクラスをコンポーネント的な形として登録して利用

と説明した。でこれ前提がCommonProperties.FEATURE_AUTO_DISCOVERY_DISABLEが設定されているようなケースであるような場合だと処理されない模様。でそれの処理を設定されていようが強制するのがForcedAutoDiscoverableな模様

っていう事でやってみた

※AutoDiscoverableなのとForcedAutoDiscoverableな両方をアプリケーションにデプロイする。但し前者はこっちでは書かないので

JAX-RSをやってみる (14) - Bean Validation -

2014-07-07T00:00:00+00:00 Java JAX-RS

公式リファレンス: https://jersey.java.net/documentation/latest/user-guide.html#bean-validation

単純にアノテーションベースで入力検証のルールを定義出来る。別に説明しなくても良いんじゃねって事で

JAX-RSをやってみる (13) - Refの依存性注入に関して -

2014-06-27T00:00:00+00:00 Java JAX-RS

前回も記述したけど、JspTemplateProcessorでは

final class JspTemplateProcessor extends AbstractTemplateProcessor<String> {

    @Inject
    private Provider<Ref<HttpServletRequest>> requestProviderRef;
    @Inject
    private Provider<Ref<HttpServletResponse>> responseProviderRef;

みたいになっとる訳で、テストで使用する際にあたってそういうところの依存性の注入の解決がうまくいかないのがあったので普通に@Contextで注入する的な事をしてましたけど、なんとか出来たっぽいので

JAX-RSをやってみる (12) - MVC -

2014-06-25T00:00:00+00:00 Java JAX-RS

公式ドキュメント: https://jersey.java.net/documentation/latest/user-guide.html#mvc

参考: http://qiita.com/opengl-8080/items/f4c25ad671e8a6dac743

jersey-mvcなAPIを使えばViewableをぶん投げたりする事によりテンプレートエンジンによりレスポンスを出したりする事も出来る。※現時点で公式でサポートされているテンプレートエンジンがfreemarkerとmustacheとjsp

っていう事でやってみる

JAX-RSをやってみる (11) - Server Sent Events -

2014-06-21T00:00:00+00:00 Java JAX-RS

公式ドキュメント: https://jersey.java.net/documentation/latest/user-guide.html#sse

Server Sent Eventsにも対応している模様。んまぁドキュメントに書いてる通りにjersey-media-sseなライブラリを参照をすればAutoDiscoverableとかそれによりSseFeatureが作用してServer Sent Eventsなのを利用出来るようになる感じかと

JAX-RSをやってみる (10) - AsyncResponse -

2014-06-19T00:00:00+00:00 Java JAX-RS

公式ドキュメント: https://jersey.java.net/documentation/latest/user-guide.html#async

例えば、Threadでなんか非同期に処理するような場合にレスポンスを返す場合にはAsyncResponseを使えば良いとの事な模様で、他にもチャンクレスポンスを出す機能のChunkedOutputを利用する方法でも可能な模様

JAX-RSをやってみる (9) - Container Filters -

2014-06-16T00:00:00+00:00 Java JAX-RS

公式ドキュメント: https://jersey.java.net/documentation/latest/user-guide.html#d0e8119

単純にリクエストなりレスポンスをフィルターする仕組みなAPIな模様。でリクエストからレスポンスまでのライフサイクルについては9.4. Filter and interceptor execution orderにかかれているのだけど、@PreMatchingを使う事によりリクエストからマッチするリソースが特定される前に実行される物なのだろうかと

JAX-RSをやってみる (8) - DynamicFeature -

2014-06-15T00:00:00+00:00 Java JAX-RS

公式ドキュメント先: https://jersey.java.net/documentation/latest/user-guide.html#d0e8531

例えば特定のリソースクラスだったりメソッドだったりで動的にコンポーネントをregisterしたいなどの要件がある場合にはDynamicFeatureを使えばよろしい模様

JAX-RSをやってみる (7) - Reader & Writer interceptor -

2014-06-14T00:00:00+00:00 Java JAX-RS

公式ドキュメント先: https://jersey.java.net/documentation/latest/user-guide.html#filters-and-interceptors

リクエストなりレスポンスなりで処理される前後になんらかの処理をしたい場合にInterceptorが使える模様。それとInterceptorは普通に定義しちゃうとグローバルに作業してしまう件に関しては@NameBindingを使ったアノテーションを定義する事で、そのアノテーションがついている場合にのみ作動するような仕組みを利用する事も可能

JAX-RSをやってみる (6) - 例外処理 -

2014-06-13T00:00:00+00:00 Java JAX-RS

んまぁJAX-RSアプリケーション上における例外処理な所を

JAX-RSをやってみる (5) - CDI -

2014-06-12T00:00:00+00:00 Java JAX-RS

んまぁJAX-RSの機能っていうわけでもないと思うのですが、Java EEな@Injectを使ってDependency Injectionするっていうだけな事

JAX-RSをやってみる (4) - MessageBodyReader -

2014-06-11T00:00:00+00:00 Java JAX-RS

前回の「JAX-RSをやってみる (3) – AutoDiscoverable -」とかだと

package sample.controller;

import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;

import sample.bean.SampleBean;
import static javax.ws.rs.core.MediaType.*;

@Path("/sample")
public class Home {

    @Path("save")
    @POST
    @Consumes(APPLICATION_JSON)
    @Produces(APPLICATION_JSON)
    public SampleBean save(SampleBean bean) {
        return bean;
    }
}

なんていうので

package sample.controller;

import javax.ws.rs.client.Entity;
import javax.ws.rs.core.Application;

import org.glassfish.jersey.test.JerseyTest;
import org.junit.Test;

import sample.SampleApplication;
import sample.bean.SampleBean;

import static javax.ws.rs.core.MediaType.*;
import static org.junit.Assert.*;
import static org.hamcrest.Matchers.*;

public class HomeTest extends JerseyTest {

    @Override
    protected Application configure() {
        return new SampleApplication();
    }

    @Test
    public void test_save() {
        Entity<SampleBean> entity = Entity.entity(
            new SampleBean("hoge"),
            APPLICATION_JSON
        );

        SampleBean response = target("/sample/save").request().post(entity, SampleBean.class);
        assertThat(response, notNullValue());
    }
}

なんていうテストをやってみると「not found MessageBodyReader」なんていうエラーになるわけで。もちろん前回のはMessageBodyWriterは実装してあるけど、MessageBodyReaderが実装されてないので。っていう事でMessageBodyReaderを実装してみた

JAX-RSをやってみる (3) - AutoDiscoverable -

2014-06-10T00:00:00+00:00 Java JAX-RS

JAX-RSで返される値の型に対してレスポンスを変換するような仕組みはMessageBodyWriter(MessageBodyReaderっていうのもある)で利用する事が出来る。@Providerアノテーションを使う事でJAX-RSアプリケーションプロジェクト内にクラスを定義すれば良いだけなのだけど、例えばそういう仕組みな所を外部のライブラリにした場合でアノテーションが処理されるパッケージフィルターに該当しないような場合にどうやってその仕組みをロードするのか調べてみるとAutoDiscoverableっていうのを使う事で外部ライブラリで定義されたクラスをコンポーネント的な形として登録して利用できる模様。

という事でやってみた

JAX-RSをやってみる (2) - glassfish deployment -

2014-06-08T00:00:00+00:00 Java JAX-RS

参考: https://jersey.java.net/documentation/latest/deployment.html#deployment.servlet.3

JAX-RSに準拠しているアプリケーションサーバー(glassfish等)ではデプロイ時の設定が若干異なる模様。またJAX-RSに準拠しているアプリケーションサーバーであれば特にデプロイメントデスクリプタ(web.xml)を定義しなくても@ApplicationPathを使う事で引数に指定したパスを<servlet-mapping>のベースとして利用できるようになるっぽい。微妙にややこしいけど

※記述している内容が正しいかは微妙なのであくまで個人的なメモとして

JAX-RSをやってみる (1)

2014-06-05T00:00:00+00:00 Java JAX-RS

Jerseyドキュメント: https://jersey.java.net/documentation/latest/index.html

参考: http://backpaper0.github.io/2013/05/02/jaxrs.html

JavaでRESTfulなWebアプリケーションを作るっていう場合とかだとJAX-RSを使えば何かと便利っぽそうなのでいろいろ勉強してみたのでちょっとだけまとめる

※JAX-RSのバージョンは2.x系をターゲットにしてます。又、以下で書くのはあくまでサーバーを起動して利用する前提ではなくテストを書いて実行しているだけなのでサーバー関係に伴ってくる部分に関しては今後に書く予定