惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
F
Full Disclosure
月光博客
月光博客
MongoDB | Blog
MongoDB | Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
T
Tailwind CSS Blog
Microsoft Security Blog
Microsoft Security Blog
N
Netflix TechBlog - Medium
The Register - Security
The Register - Security
aimingoo的专栏
aimingoo的专栏
The GitHub Blog
The GitHub Blog
D
Docker
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
I
InfoQ
腾讯CDC
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
K
Kaspersky official blog
Hugging Face - Blog
Hugging Face - Blog
D
DataBreaches.Net
P
Proofpoint News Feed
Cisco Talos Blog
Cisco Talos Blog
NISL@THU
NISL@THU
有赞技术团队
有赞技术团队
P
Proofpoint News Feed
美团技术团队
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Martin Fowler
Martin Fowler
L
Lohrmann on Cybersecurity
Know Your Adversary
Know Your Adversary
Simon Willison's Weblog
Simon Willison's Weblog
S
Securelist
T
Threatpost
云风的 BLOG
云风的 BLOG
G
Google Developers Blog
L
LangChain Blog
Blog — PlanetScale
Blog — PlanetScale
Recorded Future
Recorded Future
C
Cisco Blogs
S
SegmentFault 最新的问题
Cyberwarzone
Cyberwarzone
GbyAI
GbyAI
IT之家
IT之家
S
Schneier on Security
L
LINUX DO - 热门话题
T
Tenable Blog
T
The Exploit Database - CXSecurity.com
MyScale Blog
MyScale Blog
P
Privacy & Cybersecurity Law Blog
Google Online Security Blog
Google Online Security Blog
T
Threat Research - Cisco Blogs

博客园 - 编程我的一切

Apache Hop实战:Windows平台MySQL数据迁移的深度排错与性能调优 线程与进程的区别与联系:操作系统入门详解(含 Python 示例) 打破同源枷锁:深入理解 postMessage 跨域通信机制 三大搜索引擎 URL 推送 API 详解:百度、必应、谷歌 PandasAI:当数据分析遇上自然语言处理 Windows 左ctrl和左alt键互换 Bootstrap下拉菜单、按钮式下拉菜单 SSM三大框架的运行流程、原理、核心技术详解 app启动速度怎么提升? canvas画布基本知识点总结 SSM框架整合(Spring + SpringMVC + MyBatis) Lambda入门 HTML5中的Web Notification桌面通知 Open3d之交互式可视化 行为识别TSM训练ucf101数据集 Python3列表、元组及之间的区别和转换 Java 字符串简介 Shell从入门到精通 基于go-cqhttp实现QQ机器人
Spring boot+CXF开发WebService Demo
编程我的一切 · 2021-02-09 · via 博客园 - 编程我的一切

目录

一、本次开发除了用到spring boot基础jar包外,还用到了cxf相关jar包: 

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

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

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

五、(发布服务)接口类,业务类代码都已经准备好,那么我接下来我就要对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);
}

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

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

  

下面我来解释一下加上图方框箭头所指代码的目的:
http://impl.service.demo.paybay.cn/:这是我的业务类所在路径;
http://service.demo.paybay.cn/:这是我的接口类所在路径;
在不加上图方框箭头所指代码的情况下,你最后发服务的结果是这样的(如下图):

 

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

 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;然后就是发布结果如下图(见图四):(图四)

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

六、调用服务

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