企業のシステム開発では、異なるアプリケーション同士を連携させる必要がよくあります。
たとえば、在庫管理システムと販売管理システムをつなげたり、自社のシステムと外部のサービスを接続したり。こうした連携を実現するのが「Webサービス」という技術です。
JAX-WS(ジャックス・ダブリューエス)は、Java言語でWebサービスを簡単に作るための仕組みです。Javaの標準技術として広く使われており、企業の業務システム開発では欠かせない存在となっています。
この記事では、JAX-WSとは何か、どんな場面で使われるのか、メリットやデメリット、実際の開発方法まで分かりやすく解説します。
プログラミング初心者の方でも理解できるように、専門用語にはしっかり説明を付けていきますので、安心してお読みください。
JAX-WSとは何か?
JAX-WSの正式名称と基本概念
JAX-WSは「Java API for XML Web Services」の略称です。
もう少し詳しく言うと、JavaでSOAPベースのWebサービスを作成・利用するための標準的なAPIのことを指します。
ここで出てきた言葉を一つずつ説明しましょう。
Java(ジャバ)
- プログラミング言語の一つ
- 企業の業務システム開発で広く使われている
- 「一度書けばどこでも動く」という特徴がある
API(エーピーアイ)
- Application Programming Interfaceの略
- プログラム同士をつなぐための「橋渡し役」のようなもの
- 決められたルールに従って使う
XML(エックスエムエル)
- データを記述するための言語
- タグを使って情報を構造的に表現できる
- HTML(ホームページを作る言語)と似ている
Webサービス
- インターネットを通じてプログラム同士が通信する仕組み
- 異なるシステム間でデータをやり取りできる
つまりJAX-WSは、Javaを使ってWebサービスを開発するための「道具箱」のようなものなんですね。
JAX-WSの位置づけ
JAX-WSは、Java EE(Java Platform, Enterprise Edition)という、企業向けJavaの標準技術の一部です。
Java EEとは
- 企業の大規模システム開発に必要な機能をまとめたもの
- データベース接続、トランザクション処理、Webサービスなどの機能を含む
- 現在はJakarta EEという名前に変わっている
JAX-WSは、このJava EEの中で「Webサービスを担当する部分」という役割を持っています。
SOAPとWSDLの基礎知識
JAX-WSを理解するには、SOAPとWSDLという2つの重要な技術を知っておく必要があります。
SOAP(ソープ)とは
SOAPは「Simple Object Access Protocol」の略で、Webサービス同士が通信するときの約束事です。
SOAPの特徴
- XMLを使ってメッセージを送る
データをXML形式で記述してやり取りします - プロトコルに依存しない
HTTPだけでなく、SMTPなど様々な方法で送信できます - 厳格なルール
決められた形式に従う必要があるため、信頼性が高い
SOAPメッセージの構造
SOAPメッセージは、封筒(Envelope)、ヘッダー(Header)、本体(Body)の3つの部分から構成されます。
郵便の手紙をイメージすると分かりやすいでしょう。
- 封筒(Envelope):全体を包む外側
- ヘッダー(Header):送り先や送り主などの情報
- 本体(Body):実際に伝えたい内容
WSDL(ダブリューエスディーエル)とは
WSDLは「Web Services Description Language」の略で、Webサービスの仕様書のようなものです。
WSDLに書かれている内容
- どんな機能(メソッド)が使えるか
- 入力データはどんな形式か
- 出力データはどんな形式か
- どこにアクセスすればいいか(URL)
WSDLはXMLで書かれており、機械が読み取って自動的にプログラムを生成することができます。
例えるなら
レストランのメニュー表をイメージしてください。
- 料理名(機能名)
- 材料(入力パラメータ)
- 出来上がり(出力結果)
- 値段や調理時間(その他の情報)
これらが全部書いてあるのがWSDLです。
JAX-WSの歴史と進化
JAX-RPCからJAX-WSへ
JAX-WSは、実は前身となる技術があります。それがJAX-RPC(Java API for XML-based RPC)です。
JAX-RPC(古い技術)
- 2003年頃に登場
- RPC(Remote Procedure Call)スタイルが中心
- 機能が限定的だった
JAX-WS(新しい技術)
- 2006年に登場(JSR 224として標準化)
- JAX-RPCの後継として開発された
- より多くの機能とSOAP 1.2に対応
JAX-WSは、JAX-RPCの問題点を解決し、より使いやすく、より強力になった進化版なんです。
JAX-WSの主な改良点
JAX-RPCからJAX-WSへの進化で、以下のような改善がありました。
1. アノテーションのサポート
Javaのアノテーション(@マークで始まる特別な記述)を使って、簡単にWebサービスを作れるようになりました。
2. JAXB 2.0の採用
JAXB(Java Architecture for XML Binding)という技術を使うことで、JavaオブジェクトとXMLの変換が簡単になりました。
3. SOAP 1.2のサポート
新しいバージョンのSOAPに対応しました。
4. 非同期通信のサポート
処理の完了を待たずに次の作業ができるようになりました。
5. XMLスキーマの完全サポート
より複雑なデータ構造を扱えるようになりました。
JAX-WSの2つの開発アプローチ
JAX-WSでWebサービスを開発する方法は、大きく分けて2つあります。
ボトムアップ・アプローチ(コードファースト)
Javaのコードから始める方法です。
流れ
- Javaクラスを作る
- アノテーションを付ける
- ツールがWSDLを自動生成する
- Webサービスが完成
メリット
- プログラマーにとって分かりやすい
- 開発が早い
- Javaの知識だけで始められる
デメリット
- Javaのコードを変更すると、WSDLも変わってしまう
- 既存の仕様(WSDL)に合わせることが難しい
使いどころ
新しくWebサービスを作る場合、つまり既存の仕様がない場合に向いています。
トップダウン・アプローチ(コントラクトファースト)
WSDLから始める方法です。
流れ
- WSDLファイルを作る(または受け取る)
- ツールがJavaコードを自動生成する
- 生成されたコードを元に実装する
- Webサービスが完成
メリット
- 仕様(WSDL)が先に決まっているので変更されにくい
- 既存システムとの連携がしやすい
- 契約(仕様)重視の開発に適している
デメリット
- WSDLを理解する必要がある
- 初期設定が少し複雑
使いどころ
既存のWebサービスに接続する場合や、仕様が先に決まっている場合に向いています。
JAX-WSの主要なアノテーション
JAX-WSでは、Javaのアノテーション(@マーク付きの特別な記述)を使ってWebサービスを定義します。
@WebService
Webサービスであることを示すアノテーションです。
@WebService
public class CalculatorService {
// Webサービスのメソッド
}
クラスに@WebServiceを付けるだけで、そのクラスがWebサービスになります。
主な属性
name:サービスの名前targetNamespace:名前空間(重複を避けるための識別子)endpointInterface:サービスエンドポイントインターフェース
@WebMethod
Webサービスとして公開するメソッドを示すアノテーションです。
@WebService
public class CalculatorService {
@WebMethod
public int add(int a, int b) {
return a + b;
}
}
@WebMethodを付けたメソッドだけが、外部から呼び出せるようになります。
@WebParam
メソッドのパラメータに名前を付けるアノテーションです。
@WebMethod
public int add(@WebParam(name = "firstNumber") int a,
@WebParam(name = "secondNumber") int b) {
return a + b;
}
WSDLで分かりやすい名前を使いたい場合に便利です。
@WebResult
戻り値に名前を付けるアノテーションです。
@WebMethod
@WebResult(name = "sum")
public int add(int a, int b) {
return a + b;
}
WSDLでの戻り値の名前をカスタマイズできます。
JAX-WSで簡単なWebサービスを作る
実際にJAX-WSを使って、簡単な計算機のWebサービスを作ってみましょう。
ステップ1:Javaクラスの作成
まず、普通のJavaクラスを作ります。
package com.example.service;
import jakarta.jws.WebService;
import jakarta.jws.WebMethod;
@WebService
public class CalculatorService {
@WebMethod
public int add(int a, int b) {
return a + b;
}
@WebMethod
public int subtract(int a, int b) {
return a - b;
}
@WebMethod
public int multiply(int a, int b) {
return a * b;
}
@WebMethod
public int divide(int a, int b) {
if (b == 0) {
throw new IllegalArgumentException("ゼロで割ることはできません");
}
return a / b;
}
}
このコードのポイントは:
@WebServiceでクラス全体をWebサービスとして定義@WebMethodで各メソッドを公開する機能として定義- 普通のJavaコードと同じように書ける
ステップ2:サーバーでの公開
作成したWebサービスをサーバーで公開します。
GlassFish、WildFly、Tomcatなどのサーバーにデプロイすれば、自動的にWebサービスとして動作します。
サーバーが以下のことを自動的にやってくれます:
- WSDLの生成
- SOAPメッセージの処理
- HTTPリクエストの受付
JAX-WSクライアントの作り方
Webサービスを作ったら、次はそれを利用する「クライアント」を作ります。
wsimportツールの使用
JAX-WSにはwsimportという便利なツールが付属しています。
wsimportツールの役割
WSDLファイルを読み込んで、Javaのクライアントコードを自動生成します。
使い方
wsimport -keep -p com.example.client http://localhost:8080/CalculatorService?wsdl
このコマンドで、クライアント用のJavaクラスが自動的に作られます。
クライアントコードの作成
生成されたクラスを使って、Webサービスを呼び出します。
package com.example.client;
public class CalculatorClient {
public static void main(String[] args) {
// サービスのインスタンスを取得
CalculatorService service = new CalculatorService();
// ポート(実際のサービス)を取得
Calculator port = service.getCalculatorPort();
// メソッドを呼び出す
int result = port.add(10, 5);
System.out.println("10 + 5 = " + result);
result = port.multiply(10, 5);
System.out.println("10 × 5 = " + result);
}
}
まるで普通のJavaメソッドを呼び出すように、Webサービスが使えます。
JAX-WSのメリット
標準化された技術
JAX-WSは、Java EE(Jakarta EE)の公式な標準技術です。
メリット
- どのJavaアプリケーションサーバーでも動く
- 長期的にサポートされる
- 多くの開発者が知っている
アノテーションによる簡単な開発
@WebServiceなどのアノテーションを使うだけで、Webサービスが作れます。
複雑な設定ファイルを書く必要がほとんどありません。
高い相互運用性
SOAP標準に準拠しているため、他の言語(C#、Python、PHPなど)で作られたシステムとも連携できます。
JavaのWebサービスを、.NETのクライアントから呼び出すことも可能です。
企業向け機能が充実
以下のような企業システムに必要な機能が標準でサポートされています:
- WS-Security:セキュリティ機能
- WS-ReliableMessaging:信頼性の高い通信
- トランザクション対応:データの整合性を保つ
ツールのサポートが豊富
多くの開発ツールがJAX-WSをサポートしています。
- Eclipse
- IntelliJ IDEA
- NetBeans
- Visual Studio Code(プラグインを使用)
自動生成ツールも充実しており、開発効率が高いです。
JAX-WSのデメリットと注意点
XMLのオーバーヘッド
SOAPはXMLベースなので、データサイズが大きくなりがちです。
例えば
「こんにちは」という5文字のメッセージを送るだけでも、SOAPメッセージは数百バイトになることがあります。
影響
- 通信速度が遅くなる可能性
- ネットワーク帯域を多く消費する
パフォーマンスの問題
XMLの解析(パース)には処理時間がかかります。
大量のリクエストを高速に処理する必要がある場合、REST APIなど他の技術の方が適していることもあります。
複雑さ
WSDLやSOAPの仕組みを理解するには、ある程度の学習が必要です。
シンプルなデータのやり取りだけなら、JSONを使ったRESTful APIの方が簡単です。
モダンな開発トレンドとのギャップ
現代のWeb開発では、以下のような軽量な技術が好まれる傾向にあります:
- RESTful API(JSON形式)
- GraphQL
- gRPC
JAX-WSは「少し古い技術」と見られることもあります。
JAX-WSとRESTの比較
現代のWebサービス開発では、JAX-WS(SOAP)とREST APIの2つの選択肢があります。
JAX-WS(SOAP)が向いている場合
企業の基幹系システム
- 厳格な仕様が必要
- セキュリティ要件が高い
- トランザクション処理が必要
- 既存のSOAPシステムとの連携
具体例
- 銀行のシステム連携
- 大手企業の受発注システム
- 保険会社の契約管理システム
RESTが向いている場合
モバイルアプリやWebアプリ
- シンプルなデータ取得
- 高速なレスポンスが必要
- 軽量な通信を重視
- 最新の技術を使いたい
具体例
- SNSアプリのAPI
- ECサイトの商品検索
- 天気情報の取得
どちらを選ぶべきか
JAX-WSを選ぶ基準
✓ セキュリティと信頼性が最優先
✓ 既存のSOAPシステムがある
✓ WS-Securityなどの標準機能が必要
✓ トランザクション処理が重要
RESTを選ぶ基準
✓ シンプルさと開発速度を重視
✓ モバイルやWebフロントエンドとの連携
✓ JSON形式のデータを扱いたい
✓ 最新のトレンドに従いたい
JAX-WSを使った開発の実例
実際の企業システムで、JAX-WSがどのように使われているか見てみましょう。
例1:在庫管理システムと販売システムの連携
シナリオ
ECサイト(販売システム)が、倉庫の在庫管理システムに在庫確認を問い合わせる。
JAX-WSの役割
- 販売システムがSOAPリクエストを送信
- 在庫管理システムがリクエストを受信
- データベースで在庫を確認
- SOAPレスポンスで在庫数を返す
メリット
- 異なるベンダーのシステムでも連携可能
- セキュアな通信
- トランザクション処理で在庫の整合性を保証
例2:金融機関のシステム統合
シナリオ
複数の銀行システムを統合して、顧客情報を一元管理する。
JAX-WSの役割
- 各銀行の既存システムがSOAP Webサービスとして公開
- 統合システムがそれぞれのサービスを呼び出し
- WS-Securityで認証・暗号化
- WS-ReliableMessagingで確実な通信
メリット
- 高いセキュリティ
- 信頼性の高い通信
- 既存システムを変更せずに統合可能
JAX-WS開発に必要なツールと環境
必要なソフトウェア
JDK(Java Development Kit)
- Java 11以降を推奨
- OracleまたはOpenJDKを使用
アプリケーションサーバー
以下のいずれかが必要です:
- GlassFish(オープンソース、Jakarta EE対応)
- WildFly(Red Hat提供、旧JBoss)
- Apache Tomcat(軽量、別途JAX-WSライブラリが必要)
- WebLogic Server(Oracle提供、商用)
統合開発環境(IDE)
- Eclipse:無料、Javaの定番
- IntelliJ IDEA:高機能(有料版推奨)
- NetBeans:JAX-WSサポートが充実
主要なライブラリ
Jakarta XML Web Services API
<dependency>
<groupId>jakarta.xml.ws</groupId>
<artifactId>jakarta.xml.ws-api</artifactId>
<version>3.0.1</version>
</dependency>
JAX-WS Reference Implementation
<dependency>
<groupId>com.sun.xml.ws</groupId>
<artifactId>jaxws-rt</artifactId>
<version>3.0.0</version>
</dependency>
よくある質問(FAQ)
Q1:JAX-WSとJAX-RSの違いは何ですか?
A:JAX-WSはSOAPベースのWebサービス、JAX-RSはRESTful APIを作るための技術です。
- JAX-WS:XML、SOAP、WSDL を使用
- JAX-RS:JSON、HTTP、シンプルなURL を使用
用途によって使い分けます。
Q2:JAX-WSは古い技術ですか?
A:技術としては2006年から存在していますが、企業の基幹システムでは現在も広く使われています。
新しいプロジェクトではRESTも多いですが、既存システムとの連携やセキュリティが重要な場面ではJAX-WSが選ばれます。
Q3:初心者でもJAX-WSを学べますか?
A:Javaの基本文法を理解していれば、JAX-WSの基礎は学べます。
ただし、以下の知識があるとスムーズです:
- Javaのクラスとメソッド
- XMLの基本
- HTTP通信の概念
Q4:JAX-WSでRESTful APIは作れますか?
A:いいえ、JAX-WSはSOAP専用です。
RESTful APIを作りたい場合は、JAX-RSという別の技術を使います。
Q5:WSDLは手書きする必要がありますか?
A:ボトムアップ・アプローチなら、WSDLは自動生成されるので手書きする必要はありません。
トップダウン・アプローチの場合でも、ツールを使って生成できることが多いです。
Q6:JavaのバージョンはJAX-WSに影響しますか?
A:はい、影響します。
- Java 8まで:標準でJAX-WSが含まれている
- Java 9以降:モジュール化により、別途ライブラリの追加が必要
- Java 11以降:完全に削除されたため、必ずライブラリを追加
最新のJavaを使う場合は、MavenやGradleで依存関係を設定しましょう。
まとめ
JAX-WSについて、基礎から実践的な内容まで解説しました。
JAX-WSのポイント
✓ 定義
- JavaでSOAP Webサービスを作る標準API
- Java EE(Jakarta EE)の一部
✓ 主な特徴
- アノテーションで簡単に開発できる
- WSDLとSOAPを使った標準的な通信
- 高い相互運用性と信頼性
✓ 2つの開発方法
- ボトムアップ:Javaコードから始める
- トップダウン:WSDLから始める
✓ メリット
- 企業向け機能が充実
- セキュリティと信頼性が高い
- 他言語との連携が容易
✓ デメリット
- XMLのオーバーヘッド
- RESTに比べて複雑
- パフォーマンスが劣る場合がある
✓ 使いどころ
- 企業の基幹システム
- セキュリティ重視の連携
- 既存SOAPシステムとの統合
- トランザクション処理が必要な場面
JAX-WSは、現代の開発トレンドではRESTに押されている面もありますが、セキュリティと信頼性が求められる企業システムでは今でも重要な技術です。
特に、銀行、保険、大手企業の基幹システムなど、ミッションクリティカルな環境では、JAX-WSの堅牢性が活きてきます。
これからJavaのエンタープライズ開発を学ぶ方は、RESTful APIと併せてJAX-WSの基礎も押さえておくと、より幅広いプロジェクトに対応できるでしょう。


コメント