読書会(JavaによるRESTfulシステム構築)第2回議事録

[ 戻る ]


2011年06月25日 土曜日

参加者 高橋(徹) 門脇 高橋(智) 天野 松永 根本 村山 岩室 吉本 桜井 今井 遠藤 根本(記)

P33 顧客の更新 より
 3.1.3 JAX-RSとJavaインターフェイス

P37 下記部分の「すべての再定義」とは何の標準で決まったことなのか?
JAX-RSレイヤーか?
JAX-RSの仕様を確認、クラス単位で必要だからか?
----------------------------------------------------
 public class CustomerResourceService implements CustomerResource {@POST
@Consumes("application/xml;charset=utf-8") public Response createCustomer(InputStream is) {
... 実装 ...
}
この例では、 1つの特定のメソッドに対してインターフェイスで定義されたメタデータをオーバライド することになる。メソッドに対するメタデータをオーバライドする場合、変更対象が 1つだけだとしても、 そのメソッドに対するすべてのアノテーションメタデータの再指定が必要になる。
----------------------------------------------------

P42 下記web.xmlに於いて
com.jaxrs.vendor.JaxrsVendorServlet によってinitparamが違うものになるはず
----------------------------------------------------
<?xml version="1.0"?>
 <web-app>
  <display-name>Archetype Created Web Application</display-name> <servlet>
  <servlet-name>Rest</servlet-name>
  <servlet-class>
    com.jaxrs.vendor.JaxrsVendorServlet   <-- サーブレット定義
  </servlet-class>
  <init-param>
   <param-name>javax.ws.rs.Application</param-name> <param-value> <--この名前はJAX-RSによって決まっている
   com.restfully.shop.services.ShoppingApplication </param-value>
  </init-param>
  </servlet>
  <servlet-mapping>
   <servlet-name>Rest</servlet-name>     <-- サーブレット実装
   <url-pattern>/*</url-pattern>
  </servlet-mapping>
 </web-app>
----------------------------------------------------

3章に続いて、15章に飛んで読むこととする。
15章は、3章に対するハンズオンのため。

JettyはMavenがサポートするのか
pom.xml は antのbuild.xml と同じもの
pom.xml は使いにくい、pom.xmlがまともに書ける人がいない

p221 pom.xmlの例  Legacy layoutとは何か?
----------------------------------------------------
<name/>
 <description/><repositories>
  <repository>
   <id>java.net</id>
   <url>http://download.java.net/maven/1</url>
   <layout>legacy</layout>      <--  legacyレイアウトとは何か
  </repository>
  <repository>
   <id>maven repo</id>
   <name>maven repo</name>
   <url>http://repo1.maven.org/maven2/</url>
  </repository>
   <!-- For resteasy -->
  <repository>
   <id>jboss</id>
   <name>jboss repo</name>
   <url>http://repository.jboss.org/maven2</url>
 </repository>
</repositories>
----------------------------------------------------

4章 HTTPメソッドとURIマッチング
4.1 HTTPメソッドのバインド
JAX-RSの標準メタアノテーション
 @javax.ws.rs.GET
 @javax.ws.rs.PUT
 @javax.ws.rs.POST
 @javax.ws.rs.DELETE
 @javax.ws.rs.HEAD
メタアノテーションの価値は、PUT POST GET DELTEの標準HTTPメソッドを拡張して独自なアノテーションを作るため。
例えば MOVE、COPY、MKCOL、LOCK、UNLOCK などかありえる。
しかしこのように自由に拡張してしまって、これでRESTfulといえるのか。


4.2.3マトリックスパラメータ

下記表記で /e55の 最初の/はあってもなくても相対パス扱いらしい。
----------------------------------------------------
@Path("/mercedes")
public class MercedesService {@GET
@Path("/e55/{year}")
@Produces("image/jpeg")
public Jpeg getE55Picture(@PathParam("year") String year) {
...
}
----------------------------------------------------

ディレクトリ名が日本語の場合、文字コードは規定されているのか? 不明。

17章
4章のサンプルコード

@PATCH アノテーション の価値がわからない、これは状態を持つのではないのか。

5章 JAX-RSインジェクション
5.1 基本 JAX-RSアノテーションでインジェクトできる対象は複数存在する。

JAX-RS仕様が規定するインジェク ションアノテーションを以下に示す。
 @javax.ws.rs.PathParam
 @javax.ws.rs.MatrixParam
 @javax.ws.rs.QueryParam
 @javax.ws.rs.FormParam
 @javax.ws.rs.HeaderParam
 @javax.ws.rs.CookieParam
 @javax.ws.rs.core.Context
5.2 @PathParam

5.3 @MatrixParam
----------------------------------------------------
@Path("/{make}")           <-- ここが cars/{make} になっていないのは誤植か?
public class CarResource {@GET
@Path("/{model}/{year}")
@Produces("image/jpeg")
public Jpeg getPicture(@PathParam("make") String make,
@PathParam("model") String model, @MatrixParam("color") String color) { ...
}
----------------------------------------------------

戻り値はひとつ

コレクション

下記コードの List<String>の部分が気になる、
Integerを定義した場合、動作するのか。

----------------------------------------------------
import java.util.List;
@Path("/customers")
public class CustomerResource {@GET
@Produces("application/xml")
public String getCustomers(
@QueryParam("start") int start, @QueryParam("size") int size,
@QueryParam("orderBy") List<String> orderBy) { ...
}
}
----------------------------------------------------

引数でGenericは取れるか getTypeParametersがあるが取れるのはgeneric methodの型パラメータしか分らないのではないのか。
  getGenericParameterTypes で Type取得できないか。
JAX-RS か ServletFilterで 400 Bad Requestをひっかけたら便利ではないか。

5章が終わって、そのサンプルの 18章を読み、次回は6章から。


[ 戻る ]