說明
說起web service最近幾年restful大行其道勋眯,大有取代傳統(tǒng)soap web service的趨勢罢屈,但是一些特有或相對老舊的系統(tǒng)依然使用了傳統(tǒng)的soap web service笼呆,例如銀行挫鸽、航空公司的機票查詢接口等。
目前就遇到了這種情況埃脏,需要在系統(tǒng)中查詢第三方提供的soap web service接口搪锣,也就是說要將它整合進現有的系統(tǒng)當中。
Spring整合CXF本來十分簡單彩掐,但是因為使用了Spring Boot
构舟,不想用以前xml一堆配置的方式,那么能否按照Spring Boot的風格優(yōu)雅的進行整合呢佩谷?
答案當然是肯定的旁壮,但是遍查網上幾乎沒有這方面的資料,折騰過后覺得還是有必要記錄一下谐檀,雖然它顯得非常的簡單抡谐。
1. pom文件引用
這里主要添加的是cxf的包依賴
<!-- 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>
2. 業(yè)務層的創(chuàng)建
這里我創(chuàng)建了一個hello word的測試方法
@WebService
public interface UserService {
/**
* 用戶say:hello
* @param userName
* @return
*/
@WebMethod
public String sayHello(@WebParam(name = "userName") String userName);
}
在業(yè)務實現中我們需要如下配置:
參數說明:
targetNamespace
為這是我的接口類所在路徑;
endpointInterface
這是我的業(yè)務類所在路徑桐猬;
@WebService(name = "userService",targetNamespace = "http://www.hrabbit.xin/",endpointInterface = "com.hrabbit.xin.service.UserService")
public class UserServiceImpl implements UserService {
/**
* 用戶say:hello word Webservice
* @param userName
* @return
*/
@Override
public String sayHello(String userName) {
return userName+":say hello word WebService!";
}
}
3. 添加配置類
業(yè)務層我們已經創(chuàng)建完成了麦撵,但是我們應該如何讓webService運行起來呢?
@Configuration
public class WebServiceConfig {
@Bean
public ServletRegistrationBean servletRegistrationBean() {
ServletRegistrationBean bean = new ServletRegistrationBean(new CXFServlet(), "/webService/*");
bean.setLoadOnStartup(0);
bean.setOrder(Ordered.HIGHEST_PRECEDENCE);
return bean;
}
@Bean(name = Bus.DEFAULT_BUS_ID)
public SpringBus springBus() {
return new SpringBus();
}
@Bean
public UserService layout() {
return new UserServiceImpl();
}
@Bean
public Endpoint endpoint() {
EndpointImpl endpoint = new EndpointImpl(springBus(), layout());
endpoint.publish("/user");
return endpoint;
}
}
那么到這里呢溃肪,我們的所有的步驟基本完成了免胃,啟動spring boot 然后再瀏覽器中輸入url:http://localhost:8080/webService/user?wsdl
可以看到有相關的wsdl描述信息輸出了,說明服務已經發(fā)布了惫撰。
那么這里我又要增加注釋了羔沙,請大家注意,我在最初查詢資料厨钻,配置demo的時候扼雏,啟動以后坚嗜,發(fā)布時候總是報404,網上有很多關于什么端口沖突等說法诗充,我試過后苍蔬,根本不是那一回事,然后我無意中嘗試了一下蝴蜓,在url地址處加入工程名碟绑,結果,問題解決了茎匠。
因此請大家注意:在測試發(fā)布服務的時候格仲,你在瀏覽器中輸入的url地址應該是:http://localhost:8080/你的工程名/user?wsdl
注:如果大家在搭建過程中遇到了注冊CXFServlet的時候,一直報錯诵冒,則可檢查是否添加了autoconfigure
的配置
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
</dependency>
4.啟動服務
啟動服務之后抓狭,在瀏覽器上輸入http://localhost:8080/webService/user?wsdl 如果出現如下界面,則代表發(fā)布成功了造烁!
5. 客戶端
服務端我們已經寫好了,那么客戶端如何弄呢午笛?其實我們可以借助Idea自己生成WebServiceClient惭蟋,步驟如下:
5.1 新建項目
打開新建一個項目,選擇WebServiceClient
5.2 輸入url地址
輸入webService服務端的地址
點擊Ok即可生成WebService的客戶端
5.3 調用接口
通過如下方法即可調用方法药磺,是不是很簡單告组!
后言
本文使用的是Apache CXF集成,因為spring boot存在的目的就是一個微服務框架癌佩,結果又搞個soap框架進去木缝,顯得特別不倫不類。正是因為有這么多老項目的重構才會有這么不倫不類的集成围辙。綜上我碟,我就選了spring家族的spring web service能夠很好的跟spring boot進行集成。
那么我會在下面的一篇文章中為大家說明如何使用spring web service姚建!
碼云:https://gitee.com/hrabbit/spring-boot-node
個人博客:www.hrabbit.xin