使用SpringBoot調用Web Service接口

一、什麼是Web Service

Web Service是一種基於Web的技術,允許兩個應用程序之間進行交互,而無需了解對方應用程序的語言、操作系統和網絡協議。Web Service採用標準的XML消息機制,實現跨平台、跨語言和跨網絡的通信。

二、SpringBoot框架

SpringBoot是一種基於Spring框架的開發方式,通過簡化配置文件的方式,使得我們可以快速地構建Spring應用程序。SpringBoot直接嵌入Tomcat容器,可以直接運行成為一個獨立的應用程序。

三、調用Web Service接口的流程

使用SpringBoot調用Web Service接口,通常需要經過以下幾個步驟:

1、導入WebService客戶端

在pom.xml文件中加入WebService客戶端的依賴:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web-services</artifactId>
</dependency>

2、創建Web Service客戶端代理類

使用JaxWsProxyFactoryBean類創建Web Service客戶端代理類:

@Configuration
public class WebServiceConfig {

    @Bean(name = "webServiceTemplate")
    public WebServiceTemplate webServiceTemplate(Jaxb2Marshaller marshaller) {
        WebServiceTemplate webServiceTemplate = new WebServiceTemplate();
        webServiceTemplate.setMarshaller(marshaller);
        webServiceTemplate.setUnmarshaller(marshaller);
        webServiceTemplate.setMessageSender(httpUrlConnectionMessageSender());
        return webServiceTemplate;
    }

    @Bean(name="httpUrlConnectionMessageSender")
    public HttpUrlConnectionMessageSender httpUrlConnectionMessageSender() {
        return new HttpUrlConnectionMessageSender();
    }

    @Bean
    public Jaxb2Marshaller marshaller() {
        Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
        marshaller.setContextPath("com.example.demo");
        return marshaller;
    }

    @Bean(name="testServiceClient")
    public TestService testServiceClient(Jaxb2Marshaller marshaller) {
        JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
        factory.setServiceClass(TestService.class);
        factory.setAddress("http://localhost:8080/services/TestService");
        factory.setServiceName(new QName("http://example.com/", "TestServicePort"));
        factory.setEndpointName(new QName("http://example.com/", "TestServiceSoap"));
        factory.setBindingId(SOAPBinding.SOAP11HTTP_BINDING);
        factory.setUnmarshaller(marshaller);
        factory.setMarshaller(marshaller);

        Object obj = factory.create();
        return (TestService) obj;
    }

}

3、調用Web Service接口

在控制器中使用Web Service客戶端代理類調用Web Service接口:

@Controller
public class TestController {

    @Autowired
    private TestService testServiceClient;

    @RequestMapping("/test")
    @ResponseBody
    public String test() {
        TestRequest request = new TestRequest();
        request.setParam("test");
        TestResponse response = testServiceClient.test(request);
        return response.getResult();
    }

}

四、示例代碼

下面是一個完整的Demo代碼:

1、創建Web Service服務端

創建一個Java項目,添加以下依賴:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web-services</artifactId>
</dependency>

創建接口TestService:

@WebService
public interface TestService {
    @WebMethod(operationName = "test")
    TestResponse test(@WebParam(name = "request") TestRequest request);
}

創建請求類TestRequest:

@XmlRootElement(name="TestRequest")
@XmlAccessorType(XmlAccessType.FIELD)
public class TestRequest implements Serializable {

    private static final long serialVersionUID = 1L;

    private String param;

    public String getParam() {
        return param;
    }

    public void setParam(String param) {
        this.param = param;
    }

}

創建響應類TestResponse:

@XmlRootElement(name="TestResponse")
@XmlAccessorType(XmlAccessType.FIELD)
public class TestResponse implements Serializable {

    private static final long serialVersionUID = 1L;

    private String result;

    public String getResult() {
        return result;
    }

    public void setResult(String result) {
        this.result = result;
    }

}

實現TestService接口:

@WebService(endpointInterface = "com.example.demo.TestService")
@Component
public class TestServiceImpl implements TestService {

    @Override
    public TestResponse test(TestRequest request) {
        TestResponse response = new TestResponse();
        String result = "Hello " + request.getParam();
        response.setResult(result);
        return response;
    }

}

2、創建SpringBoot應用程序客戶端

創建一個SpringBoot項目,添加以下依賴:

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

編寫啟動類:

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

}

配置WebService客戶端:

@Configuration
public class WebServiceConfig {

    @Bean(name = "webServiceTemplate")
    public WebServiceTemplate webServiceTemplate(Jaxb2Marshaller marshaller) {
        WebServiceTemplate webServiceTemplate = new WebServiceTemplate();
        webServiceTemplate.setMarshaller(marshaller);
        webServiceTemplate.setUnmarshaller(marshaller);
        webServiceTemplate.setMessageSender(httpUrlConnectionMessageSender());
        return webServiceTemplate;
    }

    @Bean(name="httpUrlConnectionMessageSender")
    public HttpUrlConnectionMessageSender httpUrlConnectionMessageSender() {
        return new HttpUrlConnectionMessageSender();
    }

    @Bean
    public Jaxb2Marshaller marshaller() {
        Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
        marshaller.setContextPath("com.example.demo");
        return marshaller;
    }

    @Bean(name="testServiceClient")
    public TestService testServiceClient(Jaxb2Marshaller marshaller) {
        JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
        factory.setServiceClass(TestService.class);
        factory.setAddress("http://localhost:8080/services/TestService");
        factory.setServiceName(new QName("http://example.com/", "TestServicePort"));
        factory.setEndpointName(new QName("http://example.com/", "TestServiceSoap"));
        factory.setBindingId(SOAPBinding.SOAP11HTTP_BINDING);
        factory.setUnmarshaller(marshaller);
        factory.setMarshaller(marshaller);

        Object obj = factory.create();
        return (TestService) obj;
    }

}

編寫控制器:

@Controller
public class TestController {

    @Autowired
    private TestService testServiceClient;

    @RequestMapping("/test")
    @ResponseBody
    public String test() {
        TestRequest request = new TestRequest();
        request.setParam("test");
        TestResponse response = testServiceClient.test(request);
        return response.getResult();
    }

}

五、總結

本文介紹了如何使用SpringBoot調用Web Service接口的方法,從Web Service的基本概念、SpringBoot框架、調用Web Service接口的流程和示例代碼四個方面進行了詳細的闡述。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/283169.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-22 08:07
下一篇 2024-12-22 08:07

相關推薦

  • Python Web開發第三方庫

    本文將介紹Python Web開發中的第三方庫,包括但不限於Flask、Django、Bottle等,並討論它們的優缺點和應用場景。 一、Flask Flask是一款輕量級的Web…

    編程 2025-04-29
  • 從ga角度解讀springboot

    springboot作為目前廣受歡迎的Java開發框架,其中的ga機制在整個開發過程中起着至關重要的作用。 一、ga是什麼 ga即Group Artifacts的縮寫,它是Mave…

    編程 2025-04-29
  • Web程序和桌面程序的區別

    Web程序和桌面程序都是進行軟件開發的方式,但是它們之間存在很大的區別。本文將從多角度進行闡述。 一、運行方式 Web程序運行於互聯網上,用戶可以通過使用瀏覽器來訪問它。而桌面程序…

    編程 2025-04-29
  • Java 監控接口返回信息報錯信息怎麼處理

    本文將從多個方面對 Java 監控接口返回信息報錯信息的處理方法進行詳細的闡述,其中包括如何捕獲異常、如何使用日誌輸出錯誤信息、以及如何通過異常處理機制解決報錯問題等等。以下是詳細…

    編程 2025-04-29
  • Python操作Web頁面

    本文將從多個方面詳細介紹Python操作Web頁面的技巧、方法和注意事項。 一、安裝必要的庫 在Python中操作Web頁面,需要用到一些第三方庫。 pip install req…

    編程 2025-04-28
  • 如何使用WebAuth保護Web應用

    WebAuth是用於Web應用程序的一種身份驗證技術,可以提高應用程序的安全性,防止未經授權的用戶訪問應用程序。本文將介紹如何使用WebAuth來保護您的Web應用程序。 一、什麼…

    編程 2025-04-28
  • Python編寫Web程序指南

    本文將從多個方面詳細闡述使用Python編寫Web程序,並提供具有可行性的解決方法。 一、Web框架的選擇 Web框架對Web程序的開發效率和可維護性有着重要的影響,Python中…

    編程 2025-04-28
  • Python接口自動化測試

    本文將從如下多個方面對Python編寫接口自動化進行詳細闡述,包括基本介紹、常用工具、測試框架、常見問題及解決方法 一、基本介紹 接口自動化測試是軟件測試中的一種自動化測試方式。通…

    編程 2025-04-27
  • 有哪些Python軟件可以用來構建Web應用

    Python語言是一種膠水語言,可以和多種語言以及系統進行交互,廣泛應用於多個領域。在Web應用開發領域,Python是一個功能強大的語言,在Python社區中有許多優秀的Web應…

    編程 2025-04-27
  • SpringBoot Get方式請求傳參用法介紹

    本文將從以下多個方面對SpringBoot Get方式請求傳參做詳細的闡述,包括URL傳參、路徑傳參、請求頭傳參、請求體傳參等,幫助讀者更加深入地了解Get請求方式下傳參的相關知識…

    編程 2025-04-27

發表回復

登錄後才能評論