Top / J2EE / EclipseでWeb Servicesを開発する

Eclipse + WTPを使って、WEBサービスの開発をプロトしてみました。プリミティブオブジェクト以外の型についても、正しくWSDLとプロキシクライアントが作成され、使い物になるものが生成されることが確認できました。

WEBサービス開発の流れは

といった感じになります。

Webプロジェクトの作成

動的Webプロジェクト

プロジェクト名   : WebServicesSamplesWeb
Content Directory: war
Source Deirectory: source

EARプロジェクト

プロジェクト名   : WebServicesSamplesEAR
project.png

公開したいJavaBeans?の作成

例として

を持つ nu.mine.kino.services.HelloWorld? クラスを作成し、これをWEBサービスとして公開したいと思います。

JavaBeans?からWEBサービスの作成

WSDLの作成

次にWTPを使って、JavaBeans?からWSDLなどなどを作成していきます。パッケージエクスプローラからHelloWorld?を選択して右クリックし Create Web services を選択します。そうすると下のようなダイアログが表示されます。

01.png

このダイアログで

Web Service Type: Bottom up Java Bean Web Service
Generate a proxy にチェック
Install Web Service client on server は外す

など選択して、次へ進みます。ちなみに一般的に

Bottom up Java Bean Web Service: JavaBeansからWSDL作成
Top down  Java Bean Web Service: WSDLからJavaBeans作成

という意味だそうです。

次画面ではBeansを選択する画面です。このままHelloWorld?を選択して、次へ進みます

02.png

次は公開するWEBサービスをどのWebプロジェクトにDeployするか、またクライアントプロキシをどのプロジェクトに配置するかを指定します。Client Project typeは Java Utility Project にしておきます。

03.png

次に公開するメソッドを選択します。下のように選択し、次に進みます。

04.png

ここまできて、ようやくWEBプロジェクトにWSDLファイルが作成されます。J次の画面で、JBossをスタートしますかと聞いてくるので、サーバをスタートさせます。自動的にEARプロジェクトがデプロイされ、WEBサービスが公開された状態になります*1

05.png

プロキシクライアントの作成

あとは次へ次へと進んでいけばさっき指定したJavaProject?にプロキシクライアントが配置され、全て完了です。

tree.png

最終的に上のようなディレクトリ構造になります。

実行してみる。

いま、WEBサービスが公開されている状態なので、実際にテストクラスを作って稼動確認してみます。プロキシが置かれたプロジェクト内で以下のMainクラスを作成します。

import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
import nu.mine.kino.services.HelloWorld;
import nu.mine.kino.services.HelloWorldServiceLocator;
import nu.mine.kino.services.Model;

public class Main {
  public static void main(String[] args) {
    try {
      HelloWorld helloWorld = new HelloWorldServiceLocator()
          .getHelloWorld();
      System.out.println(helloWorld.sayHello());
      String[] hellos = helloWorld.sayHellos();
      for (int i = 0; i < hellos.length; i++) {
        System.out.println(hellos[i]);
      }
      Model model = helloWorld.getModel();
      System.out.println(model.getName());
    } catch (ServiceException e) {
      e.printStackTrace();
    } catch (RemoteException e) {
      e.printStackTrace();
    }
  }
}

実行結果は以下のようになります。

2006/04/25 17:36:29 org.apache.axis.utils.JavaUtils isAttachmentSupported
警告: 要求されたクラス(javax.activation.DataHandler と javax.mail.internet.
MimeMultipart)が見つかりません。Attachmentサポートが利用できません。 
/ [en]-(Unable to find required classes (javax.activation.DataHandler 
and javax.mail.internet.MimeMultipart). 
Attachment support is disabled.)
Hello
Hello World.
hello world.
なまえ

なんか警告が出てますが、Stringも配列もJavaBeans?も正しく稼動していることが確認できました!!

deploy/undeployをするためのantのbuild.xml

さて、ここまでで既存のJavaBeans?をWEBサービスとして公開するところまでができました。あとは公開したWEBサービスを、デプロイしたりアンデプロイするantのbuildスクリプトを作成しておこうと思います。

TIPS集

TCPモニタを使う

Apache Axisにはサーバとの通信をキャプチャするTCPモニタが同梱されています。Eclipseから、メインクラス名:org.apache.axis.utils.tcpmon で起動できます。

つかいかたですが、今までは

クライアント(接続先:8080) -> (ポート:8080)サーバ

という接続でしたが、あいだにこのツールをかますためにはクライアントの接続先ポート番号を例えば

クライアント(接続先:8081) -> (ポート:8081)tcpmon(接続先:8080) -> (ポート:8080)サーバ

と変更する必要があります。つまりクライアントのプロクシが接続しに行くサーバのポート番号を変更する必要があるのですが、それは

HelloWorldServiceLocator#setHelloWorldEndpointAddress
 ("http://localhost:8081/WebServicesSamplesWeb/services/HelloWorldService")

というエンドポイントを変更するメソッドで行うことができます。

参考:


この記事は

選択肢 投票
おもしろかった 35  
そうでもない 8  

Top / J2EE / EclipseでWeb Servicesを開発する

現在のアクセス:65521


*1 あらかじめJBossを設定済みの必要があると思います

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS