SOAPをJavaで体験してみる。
そもそもSOAPとは・・・XML-RPCから発展した、Webサービスの為のXMLベースのRPCプロトコルである。
ウィキペディアより
http://ja.wikipedia.org/wiki/SOAP_(%E3%83%97%E3%83%AD%E3%83%88%E3%82%B3%E3%83%AB)
様々な通信プロトコルで利用可能だが、実際は、TCP/IP, HTTP(S)で利用されている。
メッセージはheaderとbody、headerはオプショナルであり、ルーティングやセキュリティ、
トランザクション等のメタ情報を格納。bodyは主要な情報、ペイロードである。
JavaでSOAPとなると、Apache-SOAPなるものがあるらしい。
http://www.atmarkit.co.jp/ait/articles/0103/02/news004_3.html
が、これを使かうにはアプリケーションサーバとXMLパーサがセットアップ済み
じゃないといけないらしい。。
今回は、アプリケーションサーバをTomcat、XMLパーサをXML4Jで構築。
http://homepage2.nifty.com/ann/Windows/xml/apache-soap.html
1. Tomcat管理ユーザの作成
# useradd -s /sbin/nologin tomcat
2. Tomcatのダウンロード
公式ページからダウンロード http://tomcat.apache.org/
展開 & 設定
# tar xvzf apache-tomcat-7.0.56.tar.gz
# mv apache-tomcat-7.0.56 /usr/local
# cd /usr/local/
# chown -R tomcat:tomcat apache-tomcat-7.0.56/
# ln -s apache-tomcat-7.0.56 tomcat
3. 環境変数の設定
/etc/profileにJAVA_HOMEとCATALINA_HOMEを設定
JAVA_HOME=/usr/java/jdk1.8.0_25
PATH=$PATH:$JAVA_HOME/bin
CLASSPATH=.:$JAVA_HOME/jre/lib:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar
CLASSPATH=$CLASSPATH:/usr/share/java/mysql-connector-java-5.1.33-bin.jar
CATALINA_HOME=/usr/local/tomcat
export JAVA_HOME
export PATH
export CLASSPATH
export CATALINA_HOME
4. 起動スクリプトの作成
↓参照
http://homepage1.nifty.com/y-osumi/works/code/tomcat7/
実際に起動してみる
# /etc/init.d/tomcat start
内部からはhttp://192.168.XX.XXX:8080にアクセスできたが、
外からはiptablesを設定していないので無理な模様・・・
5. iptablesの設定
現在の状況を確認
# iptables -L --line-number
tomcatで使用するポート(8080)を許可するように設定
# vi /etc/sysconfig/iptables
以下の行を追加
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT
iptable再起動
# /etc/rc.d/init.d/iptables restart
次にSOAP必要なライブラリを入手 & 配置
必要なjarファイル・mail.jar -> http://www.oracle.com/technetwork/java/index-138643.html
・activation.jar -> http://www.oracle.com/technetwork/java/jaf11-139815.html
・soap.jar ->
soap.warを$CATALINA_HOME/webapps配下へ配置
それぞれを$CATALINA_HOME/libへ配置
所有者をtomcatに設定
# chown -R tomcat:tomcat mail.jar
# chown -R tomcat:tomcat activation.jar
Tomcat再起動!!
確認の為、http://192.168.XX.XXX:8080/soap/ に接続
無事、起動している事を確認!!
サーバー側にクラスを作る
簡単なクラスを作成// SOAP
public class HelloSoap {
public String say() {
return "Hello World";
}
}
~
コンパイルし、できたclassファイルをsoap/WEB-INF/classes配下にコピー
# javac HelloSoap.java
# cp -p /usr/local/tomcat/work/SOAP/HelloSoap.class .
Tomcatを再起動!!
サービスの登録
SOAPサーバにサービスを登録する。登録内容は以下の通り。
ID : urn:HelloSoap
Methods : say
ProviderClass : HelloSoap
deploy後
クライアント側の準備
※事前に、soap.jarをCLASSPATHへ追加しておく。// SOAPクライアント
import java.net.URL;
import org.apache.soap.rpc.*;
import org.apache.soap.Constants;
public class HelloSoapClient {
final static String USAGE = "http://localhost:49152/soap/servlet/rpcrouter";
public static void main(String[] args) {
if(args.length < 1) {
System.err.println("Usage: HelloWorldSOAPCliet " + USAGE);
System.exit(1);
}
try {
URL url = new URL(args[0]);
// Callオブジェクトを生成
Call call = new Call();
// ターゲットとなるURIを指定
call.setTargetObjectURI("urn:HelloSoap");
// ターゲットとなるメソッドを指定
call.setMethodName("say");
// 直列化のスタイルを指定
call.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);
// 呼び出しを実行
Response resp = call.invoke(url, "");
// 戻り値を取得
if(resp.generatedFault()) {
System.out.println("Fault: " + resp.getFault());
} else {
Parameter result = resp.getReturnValue();
System.out.println (result.getValue());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
コンパイル
# javac HelloSoapClient.java
実際の実行の前に、やりとりが見えるようにトンネル・モニタを実行します。
# java org.apache.soap.util.net.TcpTunnelGui 49152 localhost 8080
いざ、実行!!
# java HelloSoapClient http://localhost:49152/soap/servlet/rpcrouter
無事、リクエストメッセージのやりとりができている事を確認しました
^^
0 件のコメント:
コメントを投稿