SpringBoot整合WebService服务的实现代码
作者:湮顾千古 发布时间:2021-11-11 14:59:11
WebService是一个SOA(面向服务的编程)的架构,它是不依赖于语言,不依赖于平台,可以实现不同的语言间的相互调用,通过Internet进行基于Http协议的网络应用间的交互。 其实WebService并不是什么神秘的东西,它就是一个可以远程调用的类,或者说是组件,把你本地的功能开放出去共别人调用。
为什么使用WebService?
简单解释一下WebService,比如你的项目需要查询某银行账户余额。你能直接查吗,肯定不行,因为数据库是银行的,他不可能给你权限。你想访问他的数据库获取数据,这就需要用到WebService。通过调用银行暴露的接口来得到你想要的数据。
适用场景:
软件的集成和复用,如气象局(服务端系统)、天气查询网站等。
发布一个服务(对内/对外),不考虑客户端类型,不考虑性能,建议WebService
服务端已经确定使用webservice,客户端不能选择,必须使用WebService
软件集成:通过远程调用技术,将两个系统整合到一起,从而实现软件集成。
软件复用:同一个款软件的多次集成,最终实现复用。
不适用场景:
考虑性能时不建议使用WebService
同构程序下不建议使用WebService
Axis2与CXF的区别
目前java开发WebService的框架主要包括Axis2和CXF,如果你需要多语言的支持,你应该选择Axis2。如果你需要把你的实现侧重java并希望和Spring集成,CXF就是更好的选择,特别是把你的WebService嵌入其他的程序中。
区别 | Axis2 | CXF |
---|---|---|
简述 | WebService引擎 | 简易的SOA框架,可以作为ESB |
spring集成 | 不支持 | 支持 |
应用集成 | 困难 | 简单 |
是否跨语言 | 是 | 否 |
部署方式 | web应用 | 嵌入式 |
服务的管控和治理 | 支持 | 不支持 |
SpringBoot使用CXF集成WebService
1.向pom.xml中添加集成WebService的相关依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web-services</artifactId>
</dependency>
<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.创建服务端接口
package com.primeton.mq.service;
import javax.jws.WebService;
@WebService(name = "DemoService", // 暴露服务名称
targetNamespace = "http://service.mq.primeton.com"// 命名空间,一般是接口的包名倒序
)
public interface DemoService {
public String sayHello(String user);
}
3.创建服务端接口实现类
package com.primeton.mq.service.impl;
import com.primeton.mq.service.DemoService;
import javax.jws.WebService;
import java.util.Date;
@WebService(serviceName = "DemoService", // 与接口中指定的name一致
targetNamespace = "http://service.mq.primeton.com", // 与接口中的命名空间一致,一般是接口的包名倒
endpointInterface = "com.primeton.mq.service.DemoService"// 接口地址
)
public class DemoServiceImpl implements DemoService {
@Override
public String sayHello(String user) {
return user+",现在时间:"+"("+new Date()+")";
}
}
4.创建CXF配置类
package com.primeton.mq.webServiceConfig;
import com.primeton.mq.service.DemoService;
import com.primeton.mq.service.impl.DemoServiceImpl;
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 javax.xml.ws.Endpoint;
@Configuration
public class CxfConfig {
@Bean
public ServletRegistrationBean dispatcherServlet() {
return new ServletRegistrationBean(new CXFServlet(),"/demo/*");
}
@Bean(name = Bus.DEFAULT_BUS_ID)
public SpringBus springBus() {
return new SpringBus();
public DemoService demoService() {
return new DemoServiceImpl();
public Endpoint endpoint() {
EndpointImpl endpoint = new EndpointImpl(springBus(), demoService());
endpoint.publish("/api");
return endpoint;
}
5.启动SpringBoot服务
输入http://localhost:8090/demo/api?wsdl即可,注意我设置的端口是8090,视情况而定。
6.创建客户端
在idea中进入File > New Project…菜单打开新建项目窗口,依次选择Java、WebServices,Version项选择Apache Axis,Libraries项选择 Download。然后点击Next按钮进入下一页。
在下一页中输入项目名称,然后点击Finish
按钮开始下载依赖包。依赖包下载完成后进入新建的项目。
选WebServices > Generate Wsdl From Java Code,生成wsdl
然后选择服务地址
确定之后,创建一个测试类,代码如下:
package test;
import example.DemoServiceImplService;
public class demo {
public static void main(String[] args) {
DemoServiceImplService webServiceImpl = new DemoServiceImplService();
String result = webServiceImpl.getDemoServiceImplPort().sayHello("没有说");
System.out.println("===========================================");
System.out.println(result);
}
}
注意:实现WebService客户端不一定要生成客户端的代码,可以通过地址动态调用。
package com.primeton.mq.test;
import com.primeton.mq.service.DemoService;
import org.apache.cxf.endpoint.Client;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;
import org.apache.cxf.transport.http.HTTPConduit;
import org.apache.cxf.transports.http.configuration.HTTPClientPolicy;
public class demo {
public static void main(String[] args) {
//创建动态客户端
JaxWsDynamicClientFactory factory = JaxWsDynamicClientFactory.newInstance();
Client client = factory.createClient("http://localhost:8090/demo/api?wsdl");
// 需要密码的情况需要加上用户名和密码
//client.getOutInterceptors().add(new ClientLoginInterceptor(USER_NAME,PASS_WORD));
HTTPConduit conduit = (HTTPConduit) client.getConduit();
HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();
httpClientPolicy.setConnectionTimeout(2000); //连接超时
httpClientPolicy.setAllowChunking(false); //取消块编码
httpClientPolicy.setReceiveTimeout(120000); //响应超时
conduit.setClient(httpClientPolicy);
//client.getOutInterceptors().addAll(interceptors);//设置 *
try{
Object[] objects = new Object[0];
// invoke("方法名",参数1,参数2,参数3....);
objects = client.invoke("sayHello", "sujin");
System.out.println("返回数据:" + objects[0]);
}catch (Exception e){
e.printStackTrace();
}
}
来源:https://blog.csdn.net/sujin_/article/details/83865124


猜你喜欢
- //写注册表RegistryKey regWrite;//往HKEY_CURRENT_USER主键里的Software子键下写一个名为“Te
- 本文实例为大家分享了利用Swing绘制一个动态时钟的具体代码,供大家参考,具体内容如下效果代码在下面,可跳过解析。前言编程实现一个时钟利用S
- throw抛出异常的方式比较直接:if(age < 0){throw new MyException("年龄不能为负数!&q
- 具体步骤:1.创建一个maven项目 spring-day1-constructor2.导入依赖 <prop
- 虽然GUI技术没有很大的市场,甚至很多初学者放弃学习GUI,但是学习GUI编程的过程对于提高编程兴趣,深入理解Java编程有很大的作用。效果
- 1.添加命名空间System.IO;System.Text;2.文件的读取(1).使用FileStream类进行文件的读取,并将它转换成ch
- 目录一:spring读取配置或注解的过程二:spring的bean的生命周期2.1:实例化 Instantiation2.2:初始化3: 使
- windows下使用cmd命令提示符生成java webservice客户端代码,可以使用命令提示符直接生成客户端代码,直接导入到项目中,只
- 本文实例为大家分享了Android实现二级列表购物车功能的具体代码,供大家参考,具体内容如下MainActivity:package com
- 打jar包实现分离依赖lib和配置为了业务需要配置文件和jar分离,便于使用者修改配置信息,在网上找了很久,最终找到一个简单有效的方法。操作
- 1.Spring Gateway概述1.1 什么是Spring Cloud GatewaySpring Cloud Gateway是Spri
- 前言BeanPostProcessor 接口定义了一个你可以自己实现的回调方法,来实现你自己的实例化逻辑、依赖解决逻辑等,如果你想要在Spr
- 1. 实验目的: 使用线程池的时候,有时候需要考虑服务器的最大线程数目和程序最快
- 前言这两天面试了一个物联网公司高级研发,面试题是下面这样子公司领导,部门主管,小组组长,组成员4级,假如有个 疫情预警,先通知组人员(对个人
- 一、JDBC简介JDBC是连接java应用程序和数据库之间的桥梁。什么是JDBC?Java语言访问数据库的一种规范,是一套API。JDBC
- 废话不多说,先给大家贴代码,具体代码如下所示:import net.sf.json.JSONArray; import net.sf.jso
- 本文实例讲述了Android编程入门之HelloWorld项目目录结构。分享给大家供大家参考,具体如下:我们介绍了如何搭建Android开发
- 一、项目概述本次项目主要实现了天气预报功能。通过调用天气预报接口来获得天气数据,用LIstView和GridView来搭建每个界面,将查询的
- 快速幂取模算法的引入是从大数的小数取模的朴素算法的局限性所提出的,在朴素的方法中我们计算一个数比如5^1003%31是非常消耗我们的计算资源
- 前言今天来做个打方块的小游戏,继续熟悉kotlin的语法,更多关于kotlin的语法大家可以参考这篇文章:https://www.jb51.