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サービスを開発する場合には,パッケージ名,クラス名,およびクラス内のメソッド名の記述を見直す必要があります。