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)來完成的。