SOAP/WSDLについての概要&クライアント作成手順(2007/08/14(火) 02:21:15)

最近SOAP/WSDLについての仕事ばかりやってたのでメモ。

SOAP

SOAP通信はHTTP、FTPSMTPなどのプロトコルを使ってWebサービスを呼び出すもので、
通信にはXML文書が用いられる。
サーバとクライアント双方がSOAPを生成・解釈するためのエンジンを
持つことにより、異なる環境間での通信が容易になる。
また、HTTP等による通信なので企業間で利用する場合でもファイアウォールなどを
安全に通過することができ、B2Bでの通信に向いている。

WSDL(良くWDSLといい間違える)

XMLを用いてWebサービスが記述されたもの。
Webサービスのアドレスの最後に『?wsdl』と追加すると閲覧、使用することができる。
Apache Axisや.Net等を使用することで、WSDLからスタブ(WebサービスSOAP通信の部分等・・)を自動生成することができ、
XMLSOAPを意識することなく、簡単にクライアントが作成できる。

Apache Axisでのスタブ自動生成

java org.apache.axis.wsdl.WSDL2Java http://localhost:8080/axis/services/Webservice?wsdl

のように、ローカルなファイルからだけでなく、直接Web上のWSDLを指定してスタブを生成することもできる。

Apache Axisに付属のEchoHeadersサービスのJavaでの例

まずスタブを作成する

(Tomcat5.5のデフォルト設定ででAxisをデプロイした場合はこうなる?)

http://localhost:8080/axis/EchoHeaders.jws?wsdl
クライアントのソースを書く
import localhost.axis.EchoHeaders_jws.*;
import javax.xml.rpc.ServiceException;
import java.rmi.RemoteException;

public class EchoHeadersClient {
  public static void main(String[] args) throws ServiceException, RemoteException{
    EchoHeadersService service = new EchoHeadersServiceLocator();
    EchoHeaders eh = service.getEchoHeaders();

    System.out.println(eh.echo("Hellow SOAP!"));
  }
}
実行結果
Hellow SOAP!

Apache Axisに付属のEchoHeadersサービスのC#.Netでの例

まずスタブを作成する

Web参照の追加メニューより、WSDLのアドレスを入力し、追加ボタンを押す。

クライアントのソースを書く
using System;
using System.Collections.Generic;
using System.Text;
using EchoHeadersCSClient.localhost;

namespace EchoHeadersCSClient {
  class Program {
    static void Main(string[] args) {
      EchoHeadersService eh = new EchoHeadersService();

      Console.WriteLine(eh.echo("Hellow SOAP!"));
    }
  }
}
実行結果
Hellow SOAP!

.Netは他の言語でも比較的同じようなプログラムでも書けるので、
VB.Net等でのソースは省略!

Apache Axisに付属のEchoHeadersサービスのPerlでの例

クライアントのソースを書く
#!/usr/bin/perl

use SOAP::Lite;

$eh = SOAP::Lite -> service("http://localhost:8080/axis/EchoHeaders.jws?wsdl");
print $eh->echo("Hellow SOAP!");
実行結果
Hellow SOAP!

他にも、Axsi C++MXMLを使用してのSOAPクライアントも
作成してみましたが、どれも比較的簡単にクライアントを作成できました。

特にPerlはスタブを作成する手順がないので、一番簡単だな・・・
驚異の4行プログラミング(汗