springboot2.0整合webservice

flyingkid發表於2018-12-01

1.什麼是webservice

簡單來說,webservice就是遠端呼叫技術,也叫XML Web Service WebService是一種可以接收從Internet或者Intranet上的其它系統中傳遞過來的請求,輕量級的獨立的通訊技術。是:通過SOAP在Web上提供的軟體服務,使用WSDL檔案進行說明,並通過UDDI進行註冊。

XML:(Extensible Markup Language)擴充套件型可標記語言。面向短期的臨時資料處理、面向全球資訊網路,是Soap的基礎。

Soap:(Simple Object Access Protocol)簡單物件存取協議。是XML Web Service 的通訊協議。當使用者通過UDDI找到你的WSDL描述文件後,他通過可以SOAP呼叫你建立的Web服務中的一個或多個操作。SOAP是XML文件形式的呼叫方法的規範,它可以支援不同的底層介面,像HTTP(S)或者SMTP。

WSDL:(Web Services Description Language) WSDL 檔案是一個 XML 文件,用於說明一組 SOAP 訊息以及如何交換這些訊息。大多數情況下由軟體自動生成和使用。

2.springboot2.0整合webservice

由於springboot提供了webservice的starter元件,所以整合webservice相當簡單

pom檔案引入依賴

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web-services</artifactId>
        </dependency>
複製程式碼

新建webservice介面

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
 
/**
 * @Title: WebServiceDemoService.java
 * @Description: TODO()
 * @Author: 愛飄de小子  上午9:39
 * @Date: 2018年10月26日 09點39分
 */
@WebService
public interface WebServiceDemoService {
 
    @WebMethod
    String hello(@WebParam(name = "name")String name);
    
}
複製程式碼

介面的實現類

import org.springframework.stereotype.Service;
 
import javax.jws.WebService;
 
/**
 * @Title: WebServiceDemoServiceImpl.java
 * @Description: TODO()
 * @Author: 愛飄de小子  上午9:39
 * @Date: 2018年10月26日 09點39分
 */
@Service
@WebService(serviceName = "WebServiceDemoService", // 與介面中指定的name一致
        targetNamespace = "http://webservice.business.mixpay.com", // 與介面中的名稱空間一致,一般是介面的包名倒
        endpointInterface = "com.mixpay.business.webservice.WebServiceDemoService" // 介面地址
)
public class WebServiceDemoServiceImpl implements WebServiceDemoService {
 
    @Override
    public String hello(String name) {
        return "hello"+name;
    }
 
 
}
 
複製程式碼

新建webservice配置類WebServiceConfig

import com.mixpay.business.webservice.WebServiceDemoService;
import org.apache.cxf.Bus;
import org.apache.cxf.bus.spring.SpringBus;
import org.apache.cxf.jaxws.EndpointImpl;
import org.apache.cxf.transport.servlet.CXFServlet;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
 
import javax.xml.ws.Endpoint;
 
/**
 * @Title: WebServiceConfig.java
 * @Description: TODO(WebService配置)
 * @Author: 愛飄de小子  16:13
 * @Date: 2018年08月03日 16點13分
 */
@Configuration
public class WebServiceConfig {
 
    @Autowired
    private WebServiceDemoService webServiceDemoService;
 
    /**
     * 注入servlet  bean name不能dispatcherServlet 否則會覆蓋dispatcherServlet
     * @return
     */
    @Bean(name = "cxfServlet")
    public ServletRegistrationBean cxfServlet() {
        return new ServletRegistrationBean(new CXFServlet(),"/webservice/*");
    }
 
 
    @Bean(name = Bus.DEFAULT_BUS_ID)
    public SpringBus springBus() {
        return new SpringBus();
    }
 
    /**
     * 註冊WebServiceDemoService介面到webservice服務
     * @return
     */
    @Bean(name = "WebServiceDemoEndpoint")
    public Endpoint sweptPayEndpoint() {
        EndpointImpl endpoint = new EndpointImpl(springBus(), webServiceDemoService);
        endpoint.publish("/webservice");
        return endpoint;
    }
 
}
複製程式碼

啟動專案後,遊覽器訪問 http://localhost:專案埠/CXFServlet註冊地址   本例訪問http://localhost:8500/webservice

image
點選紅色部分檢視wsdl服務描述文件 
image

wsdl文件地址為: http://localhost:埠/CXFServlet註冊地址/介面註冊地址?wsdl

本例訪問:http://localhost:8500/webservice/webservice?wsdl

至此,webservice服務提供已經完成,接下來,webservice介面的呼叫 在idea中右鍵點選專案 --> webservices --> Generate Java Code From Wsdl

image

點選ok,會在相應的包下生成。java檔案和class檔案

測試:

image

相關文章