详解Spring boot+CXF开发WebService Demo

2025-05-29 0 56

最近工作中需要用到webservice,而且结合spring boot进行开发,参照了一些网上的资料,配置过程中出现的了一些问题,于是写了这篇博客,记录一下我这次spring boot+cxf开发的webservice的配置过程,仅供参考。

一、本次开发除了用到spring boot基础jar包外,还用到了cxf相关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>

二、首先我们创建一个实体类,内容是关于用户信息的查询和记录:

?

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;

}

}

三、接下来我们创建接口类:

?

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);

}

四、有了接口类,那么接下来我们对接口进行实现,也就是接口实现类(也就是业务类)代码:

?

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("向实体类插入数据");

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

下面我来解释一下加上图方框箭头所指代码的目的:

http://impl.service.demo.paybay.cn/:这是我的业务类所在路径;

http://service.demo.paybay.cn/:这是我的接口类所在路径;

在不加上图方框箭头所指代码的情况下,你最后发服务的结果是这样的(如下图):

详解Spring boot+CXF开发WebService Demo

并且会在你进行客户端调用的时候回报错:no operation was found with the name {http://impl.service.demo.paybay.cn/}getuser.那么原因就是:在cxf发布服务的时候,发布的是业务类(userserviceimpl.java),那么默认的命名空间就会是业务类所在包(路径),而对外界暴露的则是接口类(userservice.java),那么对于客户端调用的时侯,需要按照接口类所在路径进行命名空间的定义。

所以在发布之前我们要在业务类(userserviceimpl.java)上增加注解,指定命名空间,然后再进行发布,

那么我们最终在加上(图一)方框箭头所指代码情况下,发布服务的结果为下图(请看图三):

详解Spring boot+CXF开发WebService Demo

五、(发布服务)接口类,业务类代码都已经准备好,那么我接下来我就要对webservice服务进行发布:

代码如下:

?

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;

}

}

那么到这里呢,我们的所有的步骤基本完成了,启动spring boot 然后再浏览器中输入url:http://localhost:8080/webservice/test/user?wsdl

可以看到有相关的wsdl描述信息输出了,说明服务已经发布了。

那么这里我又要增加注释了,请大家注意,我在最初查询资料,配置demo的时候,启动以后,发布时候总是报404,网上有很多关于什么端口冲突等说法,我试过后,根本不是那一回事,然后我无意中尝试了一下,在url地址处加入工程名,结果,问题解决了。

因此请大家注意:在测试发布服务的时候,你在浏览器中输入的url地址应该是:http://localhost:8080/你的工程名/test/user?wsdl;

然后就是发布结果如下图(见图四):

详解Spring boot+CXF开发WebService Demo

到此为止,我们的服务发布成功了。

六、调用服务

?

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 为接口中定义的方法名称 张三为传递的参数 返回一个object数组

object[] objects=client.invoke("getuser","411001");

//输出调用结果

system.out.println("*****"+objects[0].tostring());

}

}

七、最后附上我的工程结构图(见图五):

详解Spring boot+CXF开发WebService Demo

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持快网idc。

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

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 详解Spring boot+CXF开发WebService Demo https://www.kuaiidc.com/116792.html

相关文章

发表评论
暂无评论