前回に続き、WebServiceTemplateの使用方法について。
目次
WebServiceTemplateの場合
-
依存関係の追加: プロジェクトの依存関係に、Spring WebとSpring WSを追加。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web-services</artifactId> </dependency>
-
WebServiceTemplateの作成: XMLとJavaオブジェクトの変換にはJAXB2マーシャラーを使用。
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.oxm.jaxb.Jaxb2Marshaller; import org.springframework.ws.client.core.WebServiceTemplate; @Configuration public class WebServiceConfig { @Bean public Jaxb2Marshaller marshaller() { Jaxb2Marshaller marshaller = new Jaxb2Marshaller(); //単一クラスをバインドする場合はsetClassesToBeBound() //特定パッケージ内のすべてのクラスをバインドする場合はsetContextPath() marshaller.setContextPath("com.example.model"); return marshaller; } @Bean public WebServiceTemplate webServiceTemplate(Jaxb2Marshaller marshaller) { WebServiceTemplate webServiceTemplate = new WebServiceTemplate(); webServiceTemplate.setMarshaller(marshaller); webServiceTemplate.setUnmarshaller(marshaller); return webServiceTemplate; } }
-
Webサービスとの通信: WebServiceTemplateを使用してWebサービスとの通信を行う。
marshalSendAndReceiveメソッドでリクエスト送信、レスポンスを受け取る。@Service public class WebServiceClient { private final WebServiceTemplate webServiceTemplate; public WebServiceClient(WebServiceTemplate webServiceTemplate) { this.webServiceTemplate = webServiceTemplate; } public ResponseObject callWebService(RequestObject request) { //marshalSendAndReceiveメソッドを使用してリクエスト送信、レスポンスを受け取る。 ResponseObject response = (ResponseObject) webServiceTemplate.marshalSendAndReceive(request); return response; } }
補足
-
WebServiceTemplateを複数作成する場合
@Bean
のname属性を使用して特定の名称を設定。
WebServiceTemplateを使用する際、@Autowired
に@Qualifier
アノテーションを併用して特定のBean名を指定することができる。 -
WebServiceTemplateの設定について
WebServiceTemplateでエンコードや接続時間に関する設定が可能。代表的な設定は下記の通り。
-
エンコーディング設定
setDefaultUriEncoding()
メソッドを使用して、リクエスト・レスポンスのエンコーディングを指定可能。UTF-8を使用する場合は下記の通り。webServiceTemplate.setDefaultUriEncoding("UTF-8");
-
接続設定
タイムアウトや接続設定などをカスタマイズ可能。import org.springframework.ws.transport.http.HttpComponentsMessageSender; // WebServiceTemplateの作成 - WebServiceTemplate内 HttpComponentsMessageSender messageSender = new HttpComponentsMessageSender(); messageSender.setConnectTimeout(5000); // 接続タイムアウトの設定(ミリ秒) messageSender.setReadTimeout(10000); // 読み込みタイムアウトの設定(ミリ秒) webServiceTemplate.setMessageSender(messageSender);
HttpComponentsMessageSender
を作成、setConnectTimeout()
とsetReadTimeout()
で接続タイムアウト、読み込みタイムアウトを設定しsetMessageSenderでWebServiceTemplateに設定。