一、什麼是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