一、什麼是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
微信掃一掃
支付寶掃一掃