|
Apache Axisは、
Apache XML ProjectによるオープンソースのSOAP
(Simple Object Access Protocol)の実装です。
●インストール・動作確認方法
- 上記のサイトからaxis-1_1rc2.tar.gzをダウンロードし、
任意のディレクトリで展開します。
- 展開して作られたサブディレクトリ
「axis-1_1rc2/webapps/axis」をサーブレットコンテナの
アプリケーション配備ディレクトリ
(例えば、Jakarta Tomcatなら$CATALINA_HOME/webapps)
の下にコピーします。
以後、使用するサーブレットコンテナはJakarta Tomcat(4.1台)
としそのトップディレクトリを$CATALINE_HOME、
そのポートを8765とします。
また、この(axis)ディレクトリを$AXIS_APP_HOMEと呼ぶことにします。
-
別途、JAF(JavaBeans Activation Framework)
のjarファイル(activation.jar)にCLASSPATHを通しておきます。
簡単には、$CATALINA_HOME/lib に activation.jarをコピーして配置します。
- Jakarta Tomcatを起動します。
-
http://localhost:8765/axis/ にアクセスし、Axis
のホームページが表示されることを確認します。
●JWSを使った簡単なWebサービスを実装する
-
$AXIS_APP_HOME の下に、Javaソースプログラム(.jws) を書いて配置します。
コンパイル処理等は不要です。
- http://localhost:8765/axis/{.jwsファイル名}
でアクセスすると、「There is a Web Service here.」
というページが出ます。
「Click to see the WSDL」
というリンクを辿ると、MSIEなどのXML対応のブラウザではWSDLが生成されて表示されます。
(Netscape 7.0などでは、白いページになりますが、「ソースを表示」
でWSDLを見ることができます)
ここで「AXIS error」というページが表示されると、.jwsファイルに書いた
Javaコードにコンパイルエラーがあるという意味なので、修正します。
public class MonthName {
private static final String[] monthNames = {
"", "Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
};
/**
* 月(1〜12)から月の名前の省略形を返します。
*/
public String getName(int n){
return (n >= 1 && n <= 12) ? monthNames[n] : null;
}
/**
* 月の名前の省略形から月(1〜12)を返します。
*/
public int getNumber(String monthName){
int n = 0;
for(int i=1; i<=12; i++){
if(monthNames[i].equals(monthName.trim())){
n = i; break;
}
}
return n;
}
}
/* end. */
|
-
任意のディレクトリで、WebServiceクライアント Javaアプリケーションを開発します。
import javax.xml.rpc.*;
import javax.xml.rpc.encoding.*;
import javax.xml.namespace.*;
public class MonthNameClient {
private static void getMonthName(Call call, int m)
throws java.rmi.RemoteException {
Object[] callArgs;
String ret;
call.setOperationName(new QName("getName"));
call.addParameter("m", XMLType.XSD_INTEGER, ParameterMode.IN);
call.setReturnType(XMLType.XSD_STRING);
callArgs = new Object[] {new Integer(m)};
ret = (String) call.invoke(callArgs);
System.out.println("正常に取得しました:[" + ret + "]");
call.removeAllParameters();
}
private static void getMonthNumber(Call call, String monthName)
throws java.rmi.RemoteException {
Object[] callArgs;
call.setOperationName(new QName("getNumber"));
call.addParameter("monthName", XMLType.XSD_STRING, ParameterMode.IN);
call.setReturnType(XMLType.XSD_INT);
callArgs = new Object[] { monthName };
int m = ((Integer)call.invoke(callArgs)).intValue();
System.out.println("正常に取得しました:[" + m + "]");
call.removeAllParameters();
}
public static void main(String[] args){
Service service;
Call call;
if(args.length != 3){
System.err.println("usage: java MonthNameClient {endpointURL} {cmd} {param}");
return;
}
String endpointURL = args[0];
try {
ServiceFactory factory = ServiceFactory.newInstance();
service = factory.createService(null);
call = (Call) service.createCall();
call.setTargetEndpointAddress(endpointURL);
((org.apache.axis.client.Call)call).setTimeout(new Integer(30*1000));
((org.apache.axis.client.Call)call).setMaintainSession(true);
if(args[1].equals("get-month-name")){
getMonthName(call, Integer.parseInt(args[2]));
}
else if(args[1].equals("get-month-number")){
getMonthNumber(call, args[2]);
}
else{
System.err.println("unrecognized command: " + args[1]);
System.err.println("'get-month-name' and 'get-month-number' are available.");
return;
}
} catch(Exception ex){
ex.printStackTrace();
}
}
}
/* end. */
|
-
$AXIS_APP_HOME/WEB-INF/lib にある、次のJARファイルに全て
CLASSPATHを通します。
axis.jar、commons-discovery.jar、commons-logging.jar、
jaxrpc.jar、saaj.jar
-
javacでコンパイルします。
-
javaでクライアントを実行します。
(first uploaded 2003/04/27 last updated 2003/05/17, URANO398)
|