38.5.2 Webサービスクライアントの実装クラスを作成する
Webサービスを利用するWebサービスクライアントの実装クラスを作成します。
Webサービスに対して3回の呼び出しをするWebサービスクライアントの作成例を次に示します。
package com.sample.client; import javax.xml.namespace.QName; import javax.xml.ws.soap.AddressingFeature; import javax.xml.ws.wsaddressing.W3CEndpointReference; import javax.xml.ws.wsaddressing.W3CEndpointReferenceBuilder; import com.sample.AddNumbers; import com.sample.AddNumbersImplService; import com.sample.AddNumbersFault_Exception; public class TestClient { int number1 = 10; int number2 = 10; int negativeNumber = -10; public static void main(String[] args) { TestClient client = new TestClient(); client.existActionAnnotation1(); client.existActionAnnotation2(); client.notExistActionAnnotation(); client.existFaultActionAnnotation(); client.notExistFaultActionAnnotation(); } public void existActionAnnotation1() { System.out.println("existActionAnnotation1"); try { AddressingFeature feature = new AddressingFeature(); AddNumbersImplService service = new AddNumbersImplService(); AddNumbers stub = service.getAddNumbersImplPort(feature); int result = stub.add(number1, number2); assert result == 20; } catch (Exception ex) { ex.printStackTrace(); assert false; } } public void existActionAnnotation2() { System.out.println("existActionAnnotation2"); try { AddressingFeature feature = new AddressingFeature(); W3CEndpointReferenceBuilder eprBuilder = new W3CEndpointReferenceBuilder(); eprBuilder.address("http://webhost:8085/addressing_dynamic_generate/AddNumbersImplService"); eprBuilder.serviceName(new QName("http://sample.com/", "AddNumbersImplService")); eprBuilder.endpointName(new QName("http://sample.com/", "AddNumbersImplPort")); W3CEndpointReference epr = eprBuilder.build(); AddNumbersImplService service = new AddNumbersImplService(); AddNumbers stub = service.getPort(epr, AddNumbers.class, feature); int result = stub.add(number1, number2); assert result == 20; } catch (Exception ex) { ex.printStackTrace(); assert false; } } public void notExistActionAnnotation() { System.out.println("notExistActionAnnotation"); try { AddressingFeature feature = new AddressingFeature(); AddNumbersImplService service = new AddNumbersImplService(); AddNumbers stub = service.getAddNumbersImplPort(feature); int result = stub.add2(number1, number2); assert result == 20; } catch (Exception ex) { ex.printStackTrace(); assert false; } } public void existFaultActionAnnotation() { System.out.println("existFaultActionAnnotation"); try { AddressingFeature feature = new AddressingFeature(); AddNumbersImplService service = new AddNumbersImplService(); AddNumbers stub = service.getAddNumbersImplPort(feature); stub.add3(negativeNumber, number2); assert false; } catch (AddNumbersFault_Exception e) { System.out.println("This is expected exception"); } catch (Exception e) { e.printStackTrace(); assert false; } } public void notExistFaultActionAnnotation() { System.out.println("notExistFaultActionAnnotation"); try { AddressingFeature feature = new AddressingFeature(); AddNumbersImplService service = new AddNumbersImplService(); AddNumbers stub = service.getAddNumbersImplPort(feature); stub.add(negativeNumber, number2); assert false; } catch (AddNumbersFault_Exception ex) { System.out.println("This is expected exception"); } catch (Exception e) { e.printStackTrace(); assert false; } } }
作成したTestClient.javaは,UTF-8形式でc:\temp\jaxws\works\addressing\client\src\com\sample\client\ディレクトリに保存します。
なお,com.sample,AddNumbers,AddNumbersImplService,AddNumbersImplPort,add,add2,およびadd3は,生成されたJavaソースのパッケージ名,クラス名,およびクラス内のメソッド名によって変わります。異なる構成のWebサービスを開発する場合には,パッケージ名,クラス名,およびクラス内のメソッド名の記述を見直す必要があります。