カタカタブログ

SIerで働くITエンジニアがカタカタした記録を残す技術ブログ。Java, Oracle Database, Linuxが中心です。たまに数学やデータ分析なども。

【Java】WebLogicでのSOAPサービス公開方法が意外と簡単だった

今回、SOAPのWebサービスについて調べる機会があったので検証結果をメモ。

今どきWebサービスと聞いてSOAPをイメージする人はほとんどいないと思われる。RESTと比べると重厚で使いにくいイメージもあるが、それでも一部のパッケージ製品などやエンタープライズJavaの世界ではまだ現場で使われることもあるSOAP。SOAPについてはいろいろな文書があるのでここでは説明を省略する。

結論を言うと、Javaで普通に書いたコードにアノテーションを付けるだけでWSDLが自動ででき、思った以上に簡単に公開することができた。

環境情報は以下。WebLogicを使っているが、後半で説明するTestのところ意外はWebLogic固有の話はないはず。

  • WebLogic12c (12.1.3)
  • Java EE 6

SOAP Webサービス作成

まず、Eclipse上で「動的Webプロジェクト」を作成する。今回はプロジェクト名を「SoapApp」とした。

まず、Webサービスとして公開するロジックを実装する。今回は例として、二つの数値を受け取り、足し算・引き算した結果を返すだけの簡単なクラスとする。注意点として、クラスに@WebServiceアノテーションを付ける。

Calculator.java

package web;

import javax.jws.WebService;

@WebService
public class Calculator {

  public int add(Calc calc) {
    return calc.getNum1() + calc.getNum2();
  }

  public int sub(Calc calc) {
    return calc.getNum1() - calc.getNum2();
  }
}

二つの数値は、intのフィールドを二つ持つPOJOクラスとして実装した。ロジックを実装したクラスでは、このPOJOクラスのインスタンスを一つ引数として受け取る。ここでも、@XmlRootElementを持たせる。

Calc.java

package web;

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class Calc {
  private int num1;
  private int num2;

  public int getNum1() {
    return num1;
  }
  public void setNum1(int num1) {
    this.num1 = num1;
  }
  public int getNum2() {
    return num2;
  }
  public void setNum2(int num2) {
    this.num2 = num2;
  }
}

プロジェクトは以上で完成。web.xml等、他のファイルには一切変更を加えていない。
f:id:osn_th:20150329224415p:plain

SOAPアプリをデプロイ

作ったSOAPアプリをWARにしてWebLogic 12cにデプロイする。
f:id:osn_th:20150329224420p:plain
たったこれだけでCalculatorServiceというWebサービスが公開されている。
以下のURLにアクセスすると、以下のようなSOAP定義が示された画面が表示される。WSDLもあるよう。
http://host:port/SoapApp/CalculatorService
f:id:osn_th:20150329224423p:plain

Webサービスをテスト

先ほどの画面に「Test」というリンクからテストを行うことができる。
クリックすると、以下のように定義した各メソッドごとのサービスをテストできる。
addのTestをクリックしてみる。
f:id:osn_th:20150329224417p:plain

こんなテスト画面が出る。
f:id:osn_th:20150329224412p:plain
Raw Messageボタンをクリックすると、リクエスト用のXMLを確認することができる。
f:id:osn_th:20150329224405p:plain

ページ下部のInvokeをクリックすると、Webサービス呼び出しが実行される。
実行結果もTest ResultsとしてXMLレスポンスが表示されている。今回の結果として、「2」と「3」を入力しaddメソッドのサービスを読んだので、結果の「5」が正しく返されていることが分かる。
f:id:osn_th:20150329224409p:plain

まとめ

以上、とても簡単な例だが、SOAPのWebサービスが利用可能になったことが分かる。SOAPの複雑なルールやWSDLを特に意識することなく、通常のJavaクラスにロジックを書けば、あとはアノテーションを付けるだけでサービスを公開できた。さらにWebLogicだと簡単なSOAPテスト画面も用意されているので、比較的わかりやすく開発できそうな印象だった。なお他のアプリケーションサーバでもこれに近しいことはできそうだけど、そこまでは未調査。

今度は公開されているWSDLからSOAPサービスを呼び出すクライアント側についても調査したい。以上!

  • 2015/3/31 追記

クライアント側の検証記事を追加しました。


関連記事