久久96国产精品久久久-久久发布国产伦子伦精品-久久精品国产精品青草-久久天天躁夜夜躁狠狠85麻豆

技術員聯盟提供win764位系統下載,win10,win7,xp,裝機純凈版,64位旗艦版,綠色軟件,免費軟件下載基地!

當前位置:主頁 > 教程 > 服務器類 >

Spring boot+CXF開發WebService Demo教程

來源:技術員聯盟┆發布時間:2017-06-09 06:26┆點擊:

最近工作中需要用到webservice,而且結合spring boot進行開發,參照了一些網上的資料,配置過程中出現的了一些問題,于是寫了這篇博客,記錄一下我這次spring boot+cxf開發的webservice的配置過程,僅供參考。

一、本次開發除了用到spring boot基礎jar包外,還用到了cxf相關jar包:

<!-- 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>

二、首先我們創建一個實體類,內容是關于用戶信息的查詢和記錄:

import java.io.Serializable; import java.util.Date; public class User implements Serializable { private static final long serialVersionUID = -5939599230753662529L; private String userId; private String username; private String age; private Date updateTime; //getter setter ...... public void setUserId(String userId) { this.userId=userId; } public void setUsername(String username) { this.username=username; } public void setAge(String age) { this.age=age; } public void setUpdateTime(Date updateTime) { this.updateTime=updateTime; } public String getUserId() { return userId; } public String getUserName() { return username; } public String getAge() { return age; } public Date getUpdateTime() { return updateTime; } }

三、接下來我們創建接口類:

import javax.jws.WebMethod; import javax.jws.WebParam; import javax.jws.WebService; import cn.paybay.demo.entity.User; @WebService public interface UserService { @WebMethod String getName(@WebParam(name = "userId") String userId); @WebMethod User getUser(String userId); }

四、有了接口類,那么接下來我們對接口進行實現,也就是接口實現類(也就是業務類)代碼:

package cn.paybay.demo.service.impl; import java.util.Date; import java.util.HashMap; import java.util.Map; import javax.jws.WebService; import cn.paybay.demo.entity.User; import cn.paybay.demo.service.UserService; @WebService(targetNamespace="",endpointInterface = "cn.paybay.demo.service.UserService") public class UserServiceImpl implements UserService{ private Map<String, User> userMap = new HashMap<String, User>(); public UserServiceImpl() { System.out.println("向實體類插入數據"); User user = new User(); user.setUserId("411001"); user.setUsername("zhansan"); user.setAge("20"); user.setUpdateTime(new Date()); userMap.put(user.getUserId(), user); user = new User(); user.setUserId("411002"); user.setUsername("lisi"); user.setAge("30"); user.setUpdateTime(new Date()); userMap.put(user.getUserId(), user); user = new User(); user.setUserId("411003"); user.setUsername("wangwu"); user.setAge("40"); user.setUpdateTime(new Date()); userMap.put(user.getUserId(), user); } @Override public String getName(String userId) { return "liyd-" + userId; } @Override public User getUser(String userId) { System.out.println("userMap是:"+userMap); return userMap.get(userId); } }

注釋(PS):在發布服務之前,我們要在這里對業務實現類進行一下說明,請大家看下圖箭頭指向的方框部分

Spring boot+CXF開發WebService Demo教程

下面我來解釋一下加上圖方框箭頭所指代碼的目的:

:這是我的業務類所在路徑;

:這是我的接口類所在路徑;

在不加上圖方框箭頭所指代碼的情況下,你最后發服務的結果是這樣的(如下圖):

Spring boot+CXF開發WebService Demo教程

并且會在你進行客戶端調用的時候回報錯:No operation was found with the name {}getUser.那么原因就是:在CXF發布服務的時候,發布的是業務類(UserServiceImpl.java),那么默認的命名空間就會是業務類所在包(路徑),而對外界暴露的則是接口類(UserService.java),那么對于客戶端調用的時侯,需要按照接口類所在路徑進行命名空間的定義。

所以在發布之前我們要在業務類(UserServiceImpl.java)上增加注解,指定命名空間,然后再進行發布,

那么我們最終在加上(圖一)方框箭頭所指代碼情況下,發布服務的結果為下圖(請看圖三):

Spring boot+CXF開發WebService Demo教程

五、(發布服務)接口類,業務類代碼都已經準備好,那么我接下來我就要對webservice服務進行發布:

代碼如下: