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)
        ...

その結果、確かに上記のようなエラーが発生しました。

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 Java 入門