2019年7月15日月曜日

MavenでTomcatにJAX-RSのせるだけ

TomcatにはJava EE 改め Jakarta EEのWeb系の機能しか載っていないので、その他のサービスを利用するにはwarの中に封じ込めてあげるのが楽です。
とりあえずJDK 12 + Apache NetBeans IDE 11.0の場合
Mavenで構築、Tomcatに公開する場合です。
GlassFishのJAX-RSライブラリを使います。

MavenでWebつくる
JAX-RS の機能でRESTfulなものを作る

Servlet相当のクラスをひとつ作り、タグだけつけます。Applicationというクラスを継承するようです。@ApplicationPath で公開パスを決めます。

package net.siisise.example.rest;

import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;

@ApplicationPath("/api")
public class RestSetup extends Application {
}

次に機能のclassを作ります。
@の機能は推測どおりかと思うので GET /api/menu/hello に公開されます。

package net.siisise.example.rest;

@Path("/menu")
public class Mmmmm {
    @Path("/hello")
    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String exHelloName() {
        return "おはよう";
    }
}

そのまま公開してもTomcatではライブラリ等不足しています。

web.xml の編集。GlassFishサーバの設定をしていると、<dependencies> にjavaee-web-api があるかもしれません。
(Bloggerの都合上XMLタグは全角で囲んでいます。)

<dependencies>
   <dependency>
       <groupid>javax</groupid>
       <artifactid>javaee-web-api</artifactid>
       <version>7.0</version>
       <scope>provided</scope>
   </dependency>
</dependencies>
これはコメントアウトします。

<dependencies>

    <dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <artifactId>jersey-container-servlet</artifactId>
        <version>2.29</version>
    </dependency>
    <dependency>
       <groupId>org.glassfish.jersey.inject</groupId>
       <artifactId>jersey-hk2</artifactId>
       <version>2.29</version>
    </dependency>
</dependencies>
とりあえずこのふたつがあれば動くようです。Servletを手動で設定する必要はありませんでした。
ビルドしてデプロイすれば /api/menu/hello で動いてくれます。
JAX-RS のMavenパッケージは jakarta.ws.rs-api というのに変わっていくっぽいです。

Web Application Description Language (WADL)

それから JAX-WS の SOAPにWSDL があるように、JAX-RSなRESTにはWADL というのがあるようで、これにはJAXBのライブラリも必要らしい。
仕様 https://www.w3.org/Submission/wadl/
<dependency>
  <groupId>javax.xml.bind</groupId>
  <artifactId>jaxb-api</artifactId>
  <version>2.4.0-b180830.0359</version>
</dependency>
<dependency>
  <groupId>org.glassfish.jaxb</groupId>
  <artifactId>jaxb-runtime</artifactId>
  <version>2.4.0-b180830.0438</version>
</dependency>
少し省略して書く。
 /api/application.wadl が表示されればOK、エラーなら何か見直し。

0 件のコメント:

コメントを投稿