一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術(shù)|正則表達(dá)式|

服務(wù)器之家 - 編程語言 - JAVA教程 - 詳解Spring boot+CXF開發(fā)WebService Demo

詳解Spring boot+CXF開發(fā)WebService Demo

2020-09-30 15:24nowitzki41 JAVA教程

這篇文章主要介紹了詳解Spring boot+CXF開發(fā)WebService Demo,非常具有實(shí)用價(jià)值,需要的朋友可以參考下

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

一、本次開發(fā)除了用到spring boot基礎(chǔ)jar包外,還用到了cxf相關(guān)jar包:

?
1
2
3
4
5
6
7
8
9
10
11
<!-- 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>

二、首先我們創(chuàng)建一個(gè)實(shí)體類,內(nèi)容是關(guān)于用戶信息的查詢和記錄:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
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;
  }
}

三、接下來我們創(chuàng)建接口類:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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);
}

四、有了接口類,那么接下來我們對(duì)接口進(jìn)行實(shí)現(xiàn),也就是接口實(shí)現(xiàn)類(也就是業(yè)務(wù)類)代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
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="http://service.demo.paybay.cn/",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("向?qū)嶓w類插入數(shù)據(jù)");
    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):在發(fā)布服務(wù)之前,我們要在這里對(duì)業(yè)務(wù)實(shí)現(xiàn)類進(jìn)行一下說明,請(qǐng)大家看下圖箭頭指向的方框部分

詳解Spring boot+CXF開發(fā)WebService Demo

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

http://impl.service.demo.paybay.cn/:這是我的業(yè)務(wù)類所在路徑;

http://service.demo.paybay.cn/:這是我的接口類所在路徑;

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

詳解Spring boot+CXF開發(fā)WebService Demo

并且會(huì)在你進(jìn)行客戶端調(diào)用的時(shí)候回報(bào)錯(cuò):no operation was found with the name {http://impl.service.demo.paybay.cn/}getuser.那么原因就是:在cxf發(fā)布服務(wù)的時(shí)候,發(fā)布的是業(yè)務(wù)類(userserviceimpl.java),那么默認(rèn)的命名空間就會(huì)是業(yè)務(wù)類所在包(路徑),而對(duì)外界暴露的則是接口類(userservice.java),那么對(duì)于客戶端調(diào)用的時(shí)侯,需要按照接口類所在路徑進(jìn)行命名空間的定義。

所以在發(fā)布之前我們要在業(yè)務(wù)類(userserviceimpl.java)上增加注解,指定命名空間,然后再進(jìn)行發(fā)布,

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

詳解Spring boot+CXF開發(fā)WebService Demo

五、(發(fā)布服務(wù))接口類,業(yè)務(wù)類代碼都已經(jīng)準(zhǔn)備好,那么我接下來我就要對(duì)webservice服務(wù)進(jìn)行發(fā)布:

代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import javax.xml.ws.endpoint;
 
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.boot.web.servlet.servletregistrationbean;
import org.springframework.context.annotation.bean;
import org.springframework.context.annotation.configuration;
 
import cn.paybay.demo.service.userservice;
import cn.paybay.demo.service.impl.userserviceimpl;
 
 
@configuration
public class testconfig {
  
     @bean
    public servletregistrationbean dispatcherservlet() {
      return new servletregistrationbean(new cxfservlet(), "/test/*");
    }
    @bean(name = bus.default_bus_id)
    public springbus springbus() {
      return new springbus();
    }
    @bean
    public userservice userservice() {
      return new userserviceimpl();
    }
    @bean
    public endpoint endpoint() {
      endpointimpl endpoint = new endpointimpl(springbus(), userservice());
      endpoint.publish("/user");
      return endpoint;
    }
 
}

那么到這里呢,我們的所有的步驟基本完成了,啟動(dòng)spring boot 然后再瀏覽器中輸入url:http://localhost:8080/webservice/test/user?wsdl

可以看到有相關(guān)的wsdl描述信息輸出了,說明服務(wù)已經(jīng)發(fā)布了。

那么這里我又要增加注釋了,請(qǐng)大家注意,我在最初查詢資料,配置demo的時(shí)候,啟動(dòng)以后,發(fā)布時(shí)候總是報(bào)404,網(wǎng)上有很多關(guān)于什么端口沖突等說法,我試過后,根本不是那一回事,然后我無意中嘗試了一下,在url地址處加入工程名,結(jié)果,問題解決了。

因此請(qǐng)大家注意:在測(cè)試發(fā)布服務(wù)的時(shí)候,你在瀏覽器中輸入的url地址應(yīng)該是:http://localhost:8080/你的工程名/test/user?wsdl;

然后就是發(fā)布結(jié)果如下圖(見圖四):

詳解Spring boot+CXF開發(fā)WebService Demo

到此為止,我們的服務(wù)發(fā)布成功了。

六、調(diào)用服務(wù)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import org.apache.cxf.jaxws.endpoint.dynamic.jaxwsdynamicclientfactory;
 
 
public class client {
 
  public static void main(string args[]) throws exception{
    
    jaxwsdynamicclientfactory dcf =jaxwsdynamicclientfactory.newinstance();
    org.apache.cxf.endpoint.client client =dcf.createclient("http://localhost:8080/webservice/test/user?wsdl");
    //getuser 為接口中定義的方法名稱 張三為傳遞的參數(shù)  返回一個(gè)object數(shù)組
    object[] objects=client.invoke("getuser","411001");
    //輸出調(diào)用結(jié)果
    system.out.println("*****"+objects[0].tostring());
  }
  
}

七、最后附上我的工程結(jié)構(gòu)圖(見圖五):

詳解Spring boot+CXF開發(fā)WebService Demo

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。

原文鏈接:http://www.cnblogs.com/fuxin41/p/6289162.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 美味情缘韩国在线观看视频 | 国产精品久久久久久搜索 | 国内久久久 | 1313午夜精品久久午夜片 | 欧美一区二区三区免费看 | 国产精品第一区揄拍 | 色婷婷综合久久久 | 91庥豆果冻天美精东蜜桃传媒 | 91寡妇天天综合久久影院 | 国产日韩精品一区二区在线观看播放 | 久久久乱码精品亚洲日韩 | 男人天堂日韩 | 男女天堂 | 亚洲欧美日韩国产综合专区 | 亚洲欧美天堂综合久久 | 糖心vlog网页版 | 久久热在线视频精品店 | 91精品国产91久久久久久 | 欧美日韩国产亚洲人成 | 欧美特级午夜一区二区三区 | 国产视频中文字幕 | 好吊色青青青国产综合在线观看 | 免费超级乱淫视频播放性 | 亚洲精品国精品久久99热 | 国产 日韩 欧美 综合 | 亚洲va久久久久 | 色综合久久日韩国产 | 男女视频在线观看网站 | 国产1区2区三区不卡 | miaa076深田咏美在线 | 扒开腿开嫩苞 | 四虎1515hhcom| 91制片厂 果冻传媒 天美传媒 | 亚洲精品国产一区二区三区在 | 特级毛片全部免费播放器 | 国产精品亚洲片夜色在线 | 99久久久无码国产精品 | 好男人资源免费观看 | 亚洲国产精品一区二区久久 | 亚洲欧美日韩国产精品影院 | 美女张开大腿让男人桶 |