以下を参考にして
Apache Axis にさわる
実装技術: Apache-Axis 入門
axisのダウンロード
javaMailのダウンロード
activation.jarも要る
xmlsec.jarも要る
axisをダウンロード > 解凍したら、含まれるwebappsフォルダの中に入ってる/axis。/axisはwebアプリケーションの構成になってる。こいつを、webappsの下に配置。
http://localhost:8080/axis
にアクセスすると、axis/indexに行ける。ここから検証のハイパーリンクをクリックすると、必要なjarが有るや無しやをチェックしてくれる。アレがないコレがないと警告してくれるので、jarをtomcat/common/libに配置して再起動。
俺の環境ではmail.jar,activation.jar,xmlsec.jarを入れれば警告は消えたけど、他にもいろいろと配置しなくてはいけないのではない?。
ちなみにxmlsec.jarは必須ではないらしい。
デプロイ。
\axis-1_x\lib\*.jar
へのCLASSPATHをもりもり追加。あー、なんか嫌な予感がするー。初めての時にしくじって以来、CLASSPATH設定は苦手だ(カレントの追加が漏れてた)。
.;%AXIS_LIB%\axis.jar;
%AXIS_LIB%\axis-ant.jar;
%AXIS_LIb%\commons-discovery-0.2.jar;
%AXIS_LIB%\commons-logging-1.0.4.jar;
%AXIS_LIB%\jaxrpc.jar;
%AXIS_LIB%\log4j-1.2.8.jar;
%AXIS_LIB%\saaj.jar;
%AXIS_LIB%\wsdl4j-1.5.1.jar;
C:\apps\jakarta-tomcat-4.0.4\common\lib\servlet.jar;
C:\Program Files\Apache Software Foundation\Tomcat 5.5\common\lib\mail.jar;
C:\Program Files\Apache Software Foundation\Tomcat 5.5\common\lib.activation.jar;
などと書いてあげても、mail.jarとactivation.jarがAxisFaultを発する。クラスパスが通ってないのかな?と思って こんな時はwebアプリケーションのlibの中に入れてあげる。
C:\Program Files\Apache Software Foundation\Tomcat 5.5\webapps\axis\lib\activation.jar C:\Program Files\Apache Software Foundation\Tomcat 5.5\webapps\axis\lib\mail.jar;
でもaxisFaultは出る。なんで・・・?。
まあいいや、axisFaultは出るけど、デプロイは出来るようになった!。
とかなんとか言っても、作りたいのはクライアントなので、デプロイの必要は無し。
http://localhost:8080/axis
で検証がHAPPYならば、あと要る物はwsdlのURL。こいつを使ってスタブを作るのであるだよ。
java org.apache.axis.wsdl.WSDL2Java (引数にwsdlのURL)
axisFaultが出るけど、実行時の例外が出ないならば、カレントに新しいフォルダが出来てる。コイツを、開発用のディレクトリに配置して(WEB-INF\src\xxxxとかになるだろ)、クライアントを作る。俺はこんな感じになった。StringHolderってなんじゃろか?。
package xxxx; import javax.xml.rpc.holders.StringHolder; /** *http://muimi.com/j/axis/ のEchoサービスを参考にしているよ。 */ public class LoginTest { public static void main(String[] args) throws Exception{ //引数 //1.userName String userName="nagano"; //2.password String password="000"; //3.clientID String clientID="clientID"; //4.strMessage StringHolder strMessage= new StringHolder(); Service locater = new ServiceLocator(); //EchoService locator = new EchoServiceLocator(); ServiceSoap serviceSoap = locater.getServiceSoap(); //Echo echo = locator.getecho(); int i = serviceSoap.acceptLogin(userName, password, clientID, strMessage); System.out.println(i); } }自動生成されるスタブは、webサービスが返す値のうち、最初の一つを返すようなコードを自動生成するみたい。こういうときに欲しいのは、エラーコードとメッセージだったりするので、beanで返して貰うように書き換え。Eclipseだったらソース追うの簡単だし。
また、同じく自動生成は、接続先のURLをハードコードしてくれているので、インスタンスクラスでも静的クラスでも、とにかく外に出して、あとから簡単に触れるようにしておく。
プロパティファイルでもいいけど、今度はプロパティファイルの絶対パスをどこかに書かないといけないので、俺はやっぱり定数クラスを作る方が好き。簡単にコンパイルが通るような定数クラスを。
≪SpecialThanksTo≫
歩きつづける ゆり 咲きつづける