1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Spring】WebServiceTemplateの使用方法

Posted at

前回に続き、WebServiceTemplateの使用方法について。

目次

  1. WebServiceTemplateの場合
  2. 補足

WebServiceTemplateの場合

  1. 依存関係の追加: プロジェクトの依存関係に、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>
    
  2. 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;
        }
    }
    
  3. 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でエンコードや接続時間に関する設定が可能。代表的な設定は下記の通り。

  1. エンコーディング設定
    setDefaultUriEncoding()メソッドを使用して、リクエスト・レスポンスのエンコーディングを指定可能。UTF-8を使用する場合は下記の通り。

    webServiceTemplate.setDefaultUriEncoding("UTF-8");
    
  2. 接続設定
    タイムアウトや接続設定などをカスタマイズ可能。

    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に設定。

参考文献

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?