Web サービス・クライアントの作成
Web サービスへのプロキシクラスの作成
> wsimport -keep -p com.keicode.java.test.calc1server http://localhost:8888/WebServices/calc1?wsdl parsing WSDL... generating code... compiling code... >
上記コマンドを実行すると、calc1server というディレクトリが作成され、その中に java ソースコードと *.class ファイルが作成されます。 ディレクトリ calc1server は wsimport コマンドにて指定したターゲットパッケージ名に従って作成されます。
クライアントの作成
Web サービスをラップするクラスは上記の wsimport コマンドで作成されます。
クライアントからは wsimport が作成したクラスを利用して、以下のように呼び出せば OK です。
import com.keicode.java.test.calc1server.*; public class Calc1Client { public static void main(String[] args) { double x = 1, y = 2; Calc1Service svc = new Calc1Service(); Calc1 port = svc.getPort( Calc1.class ); System.out.format( "%.1f + %.1f = %.1f", x, y, port.add( x, y ) ); } }
実行結果は次のとおりです。
1.0 + 2.0 = 3.0
単なる足し算ですから、結果が当たり前すぎてちょっとわかりにくいので、Web サービスを停止して、 エラーが発生することを確認しましょう。
Web サービスを停止してエラーが発生するのであれば、 それは確かに実行時に Web サービスに問い合わせているといえますよね。
> java Calc1Client Exception in thread "main" javax.xml.ws.WebServiceException: Failed to access the WSDL at: http://localhost:8888/WebServices/calc1?wsdl. It failed with: Connection refused: connect. at com.sun.xml.internal.ws.wsdl.parser.RuntimeWSDLParser.tryWithMex(... at com.sun.xml.internal.ws.wsdl.parser.RuntimeWSDLParser.parse(Runti... at com.sun.xml.internal.ws.client.WSServiceDelegate.parseWSDL(WSServ... at com.sun.xml.internal.ws.client.WSServiceDelegate.(WSService... at com.sun.xml.internal.ws.client.WSServiceDelegate. (WSService... at com.sun.xml.internal.ws.spi.ProviderImpl.createServiceDelegate(Pro... at javax.xml.ws.Service. (Service.java:56) at com.keicode.java.test.calc1server.Calc1Service. (Calc1Servic... at Calc1Client.main(Calc1Client.java:11) Caused by: java.net.ConnectException: Connection refused: connect at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333) ...
その結果、確かに上記のようなエラーが発生しました。