Spring Boot—15、Web Services

34 篇文章 0 订阅
4 篇文章 0 订阅

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

1. 概述

1.1. 使用场景

  • 不考虑客户端类型和性能时发布服务,建议使用WebService
  • 服务端已经确定使用WebService,客户端必须使用WebService

1. 软件集成

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

2. 软件复用

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

1.2. 不适用场景

  • 考虑性能时不建议使用:采用xml格式封装数据,在传输过程中,要传输额外的标签,随着soap协议的不断完善,标签越来越大,导致WebService性能下降
  • 同构程序下不建议使用,比如Java使用RMI,不需要翻译成XML的数据

2. 原理

2.1. 角色

  • 服务提供者,也叫服务生成者
  • 服务请求者,也叫服务消费者
  • 服务注册中心,也叫服务代理

2.2. 操作

  • 发布:服务提供者把服务按照规范格式发布到服务注册中心
  • 查找:服务请求者根据服务注册中心提供的规范接口发出查找请求,获取绑定服务所需的相关信息
  • 绑定:服务请求者根据服务绑定信息对请求系统进行配置,从而可以调用服务提供者提供的服务

3. 实现

3.1. 添加依赖

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

3.2. 服务端

3.2.1. 服务接口

HuchxService.java

/**
 * Author: Huchx
 * Date: 2021/3/1 15:48
 */
@WebService(name = "HuchxService",//服务名
targetNamespace = "http://webservice.huchx.com"//服务命名空间
)
public interface HuchxService {
  public String sayHello(String name);
}

3.2.2. 服务实现

HuchxServiceImpl.java


/**
 * Author: Huchx
 * Date: 2021/3/1 15:51
 */
@WebService(
        name = "HuchxService",//服务名,与接口类中一致
        targetNamespace = "http://webservice.huchx.com",//命名空间
        endpointInterface = "com.huchx.webservice.service.HuchxService"//接口类地址
)
public class HuchxServiceImpl implements HuchxService {
    @Override
    public String sayHello(String name) {
        String formDate = "yyyy-MM-dd HH:mm:ss";
        return "Hello World!"+ name+", Now is "+ new SimpleDateFormat(formDate).format(new Date());
    }
}

3.2.3. CXF配置

CXFConfig.java

/**
 * Author: Huchx
 * Date: 2021/3/1 15:59
 */
@Configuration
public class CxfConfig {

	//注入服务
    @Bean
    public HuchxService huchxService(){
        return new HuchxServiceImpl();
    }

    @Bean(name = Bus.DEFAULT_BUS_ID)
    public SpringBus springBus(){
        return new SpringBus();
    }
	//使用ServletRegistrationBean以使Spring Boot支持Servlet功能
	// 此处通过CXFServelet处理/huchx/路径下的所有请求
    @Bean
    public ServletRegistrationBean dispatcherServelet(){
        return new ServletRegistrationBean(new CXFServlet(),"/huchx/*");
    }
	//通过端点发布WebService服务器
    @Bean
    public Endpoint endpoint(){
        EndpointImpl endpoint =new EndpointImpl(springBus(),huchxService());
        endpoint.publish("/service");
        return endpoint;
    }
}

3.2.4. 查看WebService服务信息

启动工程,在浏览器输入http://localhost:8080/huchx/service?wsdl,其中huchxservice为CXFConfig文件中配置的路径。?wsdl表示基于XML语言描述WebService服务信息,包括定义的方法、属性、binding协议部分、port端口以及服务URL
结果如图:
WebService

3.3. 客户端

代码地址:https://github.com/huiyiwu/spring-boot-simple/spring-boot-webservice-client

3.3.1. 添加依赖

新建Maven项目,添加依赖:

<dependency>
       <groupId>org.apache.cxf</groupId>
       <artifactId>cxf-spring-boot-starter-jaxws</artifactId>
       <version>3.2.5</version>
 </dependency>

3.3.2. 调用代码

@RequestMapping("/webservice")
    public String visitService(){
        JaxWsDynamicClientFactory factory = JaxWsDynamicClientFactory.newInstance();
       //此处地址为配置的WebService
       地址
        Client client = factory.createClient("http://localhost:8080/huchx/service?wsdl");
        try {
           Object[] objects =  client.invoke("sayHello","huchx");
            System.out.println("sayHello 返回结果:"+objects[0].toString());
            return  objects[0].toString();
        } catch (Exception e) {
            e.printStackTrace();
            return "获取失败";
        }
    }

3.3.3. 测试

启动客户端,在浏览器中输入http://localhost:8081/huchx/webservice,结果如图:
在这里插入图片描述
Result

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值