博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringBoot整合WebService服务
阅读量:4149 次
发布时间:2019-05-25

本文共 5321 字,大约阅读时间需要 17 分钟。

WebService是一个SOA(面向服务的编程)的架构,它是不依赖于语言,不依赖于平台,可以实现不同的语言间的相互调用,通过Internet进行基于Http协议的网络应用间的交互。 其实WebService并不是什么神秘的东西,它就是一个可以远程调用的类,或者说是组件,把你本地的功能开放出去共别人调用。

为什么使用WebService?

简单解释一下WebService,比如你的项目需要查询某银行账户余额。你能直接查吗,肯定不行,因为数据库是银行的,他不可能给你权限。你想访问他的数据库获取数据,这就需要用到WebService。通过调用银行暴露的接口来得到你想要的数据。

适用场景: 

软件的集成和复用,如气象局(服务端系统)、天气查询网站等。

  1. 发布一个服务(对内/对外),不考虑客户端类型,不考虑性能,建议WebService
  2. 服务端已经确定使用webservice,客户端不能选择,必须使用WebService

软件集成:通过远程调用技术,将两个系统整合到一起,从而实现软件集成。

软件复用:同一个款软件的多次集成,最终实现复用。

不适用场景:

  1. 考虑性能时不建议使用WebService
  2. 同构程序下不建议使用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的相关依赖

org.springframework.boot
spring-boot-starter-web-services
org.apache.cxf
cxf-rt-frontend-jaxws
3.1.6
org.apache.cxf
cxf-rt-transports-http
3.1.6

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;@Configurationpublic class CxfConfig {    @Bean    public ServletRegistrationBean dispatcherServlet() {        return new ServletRegistrationBean(new CXFServlet(),"/demo/*");    }    @Bean(name = Bus.DEFAULT_BUS_ID)    public SpringBus springBus() {        return new SpringBus();    }    @Bean    public DemoService demoService() {        return new DemoServiceImpl();    }    @Bean    public Endpoint endpoint() {        EndpointImpl endpoint = new EndpointImpl(springBus(), demoService());        endpoint.publish("/api");        return endpoint;    }}

5.启动SpringBoot服务

输入即可,注意我设置的端口是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);        System.out.println("===========================================");    }}

注意:实现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();      }}

 

-------------------------------------------------不怕你怀才不遇,只怕你的才华配不上野心。-------------------------------------------------

转载地址:http://typti.baihongyu.com/

你可能感兴趣的文章
基于P5.js的“绘画系统”
查看>>
《达芬奇的人生密码》观后感
查看>>
论文翻译:《一个包容性设计的具体例子:聋人导向可访问性》
查看>>
基于“分形”编写的交互应用
查看>>
《融入动画技术的交互应用》主题博文推荐
查看>>
链睿和家乐福合作推出下一代零售业隐私保护技术
查看>>
Unifrax宣布新建SiFAB™生产线
查看>>
艾默生纪念谷轮™在空调和制冷领域的百年创新成就
查看>>
NEXO代币持有者获得20,428,359.89美元股息
查看>>
Piper Sandler为EverArc收购Perimeter Solutions提供咨询服务
查看>>
RMRK筹集600万美元,用于在Polkadot上建立先进的NFT系统标准
查看>>
JavaSE_day14 集合中的Map集合_键值映射关系
查看>>
异常 Java学习Day_15
查看>>
Mysql初始化的命令
查看>>
MySQL关键字的些许问题
查看>>
浅谈HTML
查看>>
css基础
查看>>
Servlet进阶和JSP基础
查看>>
servlet中的cookie和session
查看>>
过滤器及JSP九大隐式对象
查看>>