1. 程式人生 > >SpringBoot整合WebService

SpringBoot整合WebService

服務端部分:

第一步:在Pom檔案加入WebService的相關包配置,如下

  <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <java.version>1.7</java.version>
        <springboot.version>1.5.4.RELEASE</springboot.version>
        <mybatis-spring-boot
>
1.2.0</mybatis-spring-boot> <mysql-connector>5.1.40</mysql-connector> </properties> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.4.RELEASE</version
>
</parent> <dependencies> <!-- Core Spring Boot --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <exclusions> <exclusion
>
<groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </exclusion> </exclusions> </dependency> <!-- Spring Boot Web 依賴 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency> <!-- Spring Boot Test 依賴 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!--swagger2 --> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.6.1</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.6.1</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-cache</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency> <dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka</artifactId> <version>1.1.1.RELEASE</version> </dependency> <!-- cxf支援 --> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-frontend-jaxws</artifactId> <version>3.1.6</version> </dependency> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-transports-http</artifactId> <version>3.1.6</version> </dependency> </dependencies>

第二步:編寫需要提供的服務介面

package com.demo.service;

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;

import org.springframework.stereotype.Service;

@SuppressWarnings("restriction")
@WebService(name = "HelloWorldService", // 暴露服務名稱
        targetNamespace = "http://service.demo.com/"// 名稱空間,一般是介面的包名倒序
)
@Service
public interface HelloWorldService {
    @WebMethod
    String getHello(@WebParam(name = "message") String message);
}

第三步:編寫對應服務的實現類

package com.demo.service;

import org.springframework.stereotype.Component;

@javax.jws.WebService(serviceName = "HelloWorldService", portName = "HelloWorldServiceImpl", targetNamespace = "http://service.demo.com/", endpointInterface = "com.demo.service.HelloWorldService")
@Component
public class HelloWorldServiceImpl implements HelloWorldService {

    public String getHello(String message) {
        return "hello" + message;
    }

}

第四步:加入webService的配置類

@Configuration
public class WebServiceConfig {
    @Bean(name = Bus.DEFAULT_BUS_ID)
    public SpringBus springBus() {
        return new SpringBus();
    }

    @Bean
    public HelloWorldServiceImpl helloWorldService() {
        return new HelloWorldServiceImpl();
    }

    /**
     * 自定義servlet的訪問
     */
    @Bean
    public ServletRegistrationBean servletRegistrationBean() {
        ServletRegistrationBean bean = new ServletRegistrationBean(new CXFServlet(), "/webservice/*");
        bean.setLoadOnStartup(0);
        bean.setOrder(Ordered.HIGHEST_PRECEDENCE);
        return bean;
    }

    /** JAX-WS **/
    @Bean
    public Endpoint endpoint() {
        EndpointImpl endpoint = new EndpointImpl(springBus(), helloWorldService());
        endpoint.publish("/HelloWorldService");
        return endpoint;
    }
}

客戶端部分
通過重建動態客戶端的方式呼叫服務

public class Test {
    public static void main(String[] args) {
        cl2();
    }

    public static void cl2() {
        // 建立動態客戶端
        JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
        Client client = dcf.createClient("http://localhost:8002/webservice/HelloWorldService?wsdl");
        // 需要密碼的情況需要加上使用者名稱和密碼
        // client.getOutInterceptors().add(new ClientLoginInterceptor(USER_NAME,
        // PASS_WORD));
        Object[] objects = new Object[0];
        try {
            // invoke("方法名",引數1,引數2,引數3....);
            objects = client.invoke("getHello", "你好。。。");
            System.out.println("返回資料:" + objects[0]);
        } catch (java.lang.Exception e) {
            e.printStackTrace();
        }
    }
}

簡單介紹下weiservice

Web service的概念
什麼是WebService呢?從表面上看,Web Service就是一個應用程式,它向外界暴露出一個能夠通過Web進行呼叫的API。這就是說,你能夠用程式設計的方法通過Web呼叫來實現某個功能的應用程式。從深層次上看,Web Service是一種新的Web應用程式分支,它們是自包含、自描述、模組化的應用,可以在網路(通常為Web)中被描述、釋出、查詢以及通過Web來呼叫。一旦部署以後,其他Web Service應用程式可以發現並呼叫它部署的服務。Web Service是基於網路的、分散式的模組化元件,它執行特定的任務,遵守具體的技術規範,這些規範使得Web Service能與其他相容的元件進行互操作。它可以使用標準的網際網路協議,像超文字傳輸協議HTTP和XML,將功能體現在網際網路和企業內部網上。Web Service平臺是一套標準,它定義了應用程式如何在Web上實現互操作性。你可以用你喜歡的任何語言,在你喜歡的任何平臺上寫Web Service。Web Service是構建網際網路分散式系統的基本部件。”網路服務”(WebService)的本質,就是通過網路呼叫其他網站的資源。

Web Service 三個基本技術
Web Service通過標準通訊協議,在網際網路上釋出有用的程式模組(以服務的方式),目前大部分是用SOAP來作通訊協議。

Web Service提供一份詳細的介面說明書,來幫助使用者構建應用程式,這個介面說明書叫作WSDL(Web Service Description Language)。

通常已釋出的WebService要註冊到管理伺服器,這樣便於使用者查詢和使用。這個是通過UDDI(Universal Discovery Description and Integration)來完成的。