JavaのWebサービスチュートリアル
Java Webサービスチュートリアルへようこそ。ここでは、ウェブサービスについて学び、ウェブサービスにおける有用な概念、そしてJavaでウェブサービスを作成するためのさまざまなAPIについて学びます。
ウェブサービスとは何ですか。
簡単に言えば、ネットワーク経由でアクセスできるサービスをウェブサービスと呼びます。では、それはウェブアプリケーションとどのように異なるのでしょうか?ウェブアプリケーションもネットワークを介してアクセスされるサービスです。しかし、この違いを明確にするいくつかの属性があります。
- Web applications are meant for users and to be accessed in browser having human readable format whereas web services are meant for applications to access data in the format of XML, JSON etc.
- Web applications always use HTTP/HTTPS protocol whereas traditional web services use SOAP protocol. Recently REST is getting popularity that is an architecture style and almost all times run on HTTP/HTTPS protocol.
- Web applications are not meant for reusability whereas this is one of the benefit of web services. A single web service can be used by different kinds of applications.
- Web application can access web services to access some data or to perform some tasks, web services can’t access web applications to fetch some data.
- Web applications are capable to maintain user session, web services are stateless.
Webアプリケーションとウェブサービスの違いが十分に明確になり、混乱が解消されることを願っています。両者は異なる概念であり、異なる目的のために存在しています。
ウェブサービスの種類
ウェブサービスには2つのタイプがあります。
-
- SOAP: SOAPはSimple Object Access Protocolの略です。SOAPは、ウェブサービスの設計と開発に使用される、XMLベースの業界標準プロトコルです。XMLベースなので、プラットフォームや言語に依存せずに利用することができます。そのため、サーバーはJAVAベースであり、クライアントは.NETやPHPなどであっても、互換性があります。
REST: RESTは、ウェブサービスの開発におけるアーキテクチャスタイルです。最近人気が高まっている理由は、SOAPと比較して学習コストが低いからです。リソースはRestfulなウェブサービスの中心的な概念であり、URIによって一意に識別されます。
Javaのウェブサービス
Javaは独自のAPIを提供しており、SOAPおよびRESTの両方のウェブサービスを作成することができます。
-
- JAX-WS(ジャックス・ダブリューエス)は、Java API for XML Web サービスの略です。JAX-WSは、ウェブサービスサーバーやクライアントのアプリケーションを構築するためのXMLベースのJava APIです。
- JAX-RS(ジャックス・アールエス)は、RESTful Web サービスを作成するためのJava APIであり、Java API for RESTful Web サービスの略です。JAX-RSは、アノテーションを使用してウェブサービスの開発と展開を簡素化します。
これらのAPIは両方とも標準のJDKインストールの一部ですので、それらを使用するためにはJARファイルを追加する必要はありません。この2つのAPIはどちらもアノテーションを非常に多く使用します。
こんにちは、世界のJAX-WSアプリケーション
非常にシンプルなHello World JAX-WSアプリケーションを作成しましょう。TestService.javaを作成しましょう。
package com.scdev.jaxws.service;
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.xml.ws.Endpoint;
@WebService
@SOAPBinding(style = SOAPBinding.Style.DOCUMENT)
public class TestService {
@WebMethod
public String sayHello(String msg){
return "Hello "+msg;
}
public static void main(String[] args){
Endpoint.publish("https://localhost:8888/testWS", new TestService());
}
}
それで以上です。このアプリケーションを実行するだけで、私たちのHello World JAX-WS SOAPウェブサービスが公開されます。下の画像はSOAP UIを介してこのJAX-WSウェブサービスを呼び出す様子を示しています。それがJAX-WSウェブサービスの非常に基本的なチュートリアルの内容です。SOAPウェブサービスとJAX-WSの理解を深めるために読むべき記事も以下に示されています。
-
- JAX-WSチュートリアル
-
- TomcatでのJAX-WS Webサービスの展開
-
- EclipseとApache Axisを使用したSOAP Webサービスの例
- Apache Axis 2 Webサービスチュートリアル
こんにちは、ワールド JAX-RS アプリケーション
JerseyはJAX-RS APIの基準実装であり、標準のJDKの一部ではありません。必要なjarファイルをすべて含める必要があります。最良の方法はMavenビルドを使用することであり、Eclipseで簡単な動的Webプロジェクトを作成し、それをMavenに変換します。以下に必要な依存関係を持つ最終のpom.xmlファイルがあります。
<project xmlns="https://maven.apache.org/POM/4.0.0" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>JAX-RS-HelloWorld</groupId>
<artifactId>JAX-RS-HelloWorld</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
<version>1.19</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-servlet</artifactId>
<version>1.19</version>
</dependency>
</dependencies>
<build>
<sourceDirectory>src</sourceDirectory>
<plugins>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.6</version>
<configuration>
<warSourceDirectory>WebContent</warSourceDirectory>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
今、フロントコントローラとしてJerseyサーブレットをデプロイメント記述子のweb.xmlに追加してください。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
xmlns="https://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="https://xmlns.jcp.org/xml/ns/javaee https://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
id="WebApp_ID" version="3.1">
<display-name>JAX-RS-HelloWorld</display-name>
<servlet>
<servlet-name>Jersey REST Service</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>com.scdev.jaxrs.service</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey REST Service</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
初期設定には上記の2つのステップが必要です。下には私たちのHello World JAX-RSサービスクラスがあります。
package com.scdev.jaxrs.service;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
@Path("/test")
public class TestService {
@GET
@Path("/hello/{msg}")
public String sayHello(@PathParam(value="msg") String msg){
return "Hello "+msg;
}
}
ただし、以下の画像に示されているように、WARファイルとしてエクスポートし、ブラウザでアクセスしてください。URLの最後の部分を変更すると、返されるメッセージも変わります。JAX-RS APIを使用してRESTful Webサービスを作成するのは非常に簡単であることがわかります。ただし、これにはさらに進む方法がありますので、以下の記事を参照してさらに学習してください。
-
- レストフルなWebサービス
-
- RESTEasyのチュートリアル
- Jerseyのチュートリアル
これでJavaウェブサービスの簡単な紹介は終わりです。最後に、もし面接の準備をしているのであれば、ウェブサービスの面接質問に目を通してください。参考資料:JAX-WS Oracle ページ、JAX-RS Oracle ページ