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 というのに変わっていくっぽいです。
仕様 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、エラーなら何か見直し。
とりあえず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、エラーなら何か見直し。
コメント
コメントを投稿