signed

QiShunwang

“诚信为本、客户至上”

webService简单入门实战(一)

2021/5/14 22:05:22   来源:

目录

  • 背景
  • 绪论
  • 依赖
  • 接口
  • 实现
  • 服务端
  • 客户端
  • 运行
  • 彩蛋

背景

首先谈论一下webService这个专栏的诞生吧!最近由于工作方面的原因,慢慢自己工作时间非常的“充沛”,整体为业务而忙,技能的提升方面脚步也略慢一些。由于前同事遗留的项目需要人接手,轮到小编无可厚非嘛,之前没有接触过webService相关的开发,由于小编在下班之后,在家寻找资料快速学习一下,能够快速上手开发和维护迭代项目,故此篇文章也能够帮助急需webService入门的伙伴们。

-------------------文末有彩蛋----------------

绪论

关于webService相关专栏,为什么小编没有直接介绍相关文档呢?相比大家可能更需要一个立竿见影的效果,于是小编先简单从一个DEMO入门,再者言,关于理论知识现在百度一大堆,小编也就不浪费时间搬运了,等后面针对小编的理解专门介绍,UDDI,WSDL,SOAP等等。

依赖

对于开发人员而言,新建项目、配置文件等等应该都是小菜一碟了,如若需要请自行百度或者私信小编。下面进入正题,引入webService的依赖:

	<dependency>
      <groupId>org.apache.cxf</groupId>
      <artifactId>cxf-spring-boot-starter-jaxws</artifactId>
      <version>3.2.5</version>
    </dependency>
    <!-- 引入jetty依赖,类似将服务部署在tomcat容器中-->
    <dependency>
      <groupId>org.apache.cxf</groupId>
      <artifactId>cxf-rt-transports-http-jetty</artifactId>
      <version>3.2.4</version>
    </dependency>

注意,此处基于服务端和客户端做的demo入门,故非整合springBoot框架,毕竟现在大家都是基于springBoot开发,后面专门介绍;

接口

第一次入门新语言,必然离不开HelloWorld,哈哈~

@WebService
public interface HelloWorldService {

    @WebMethod
    @WebResult(name = "getHelloWorld")
    String getHelloWorld(@WebParam(name = "userName") String userName, @WebParam(name = "age") int age);
}

@WebService
该注解用于对接口,类进行注解,表示要发布的web服务;
@WebMethod
该注解用于用@WebService注解的类或接口的方法上,表示要发布的方法;
@WebParam
注释用于定制从单个参数至 Web Service 消息部件和 XML 元素的映射,表示发布方法的参数;
**@WebResult **
注释用于定制从返回值至 WSDL 部件或 XML 元素的映射,表示发布方法的返回值;
简单了解上面的注解含义。

实现

public class HelloWorldServiceImpl implements HelloWorldService{

    @Override
    public String getHelloWorld(String userName, int age) {
        return "My name is " + userName + ", age is " + age;
    }
}

注意:细心的伙伴应该发现该实现类中并没有加任何的注解,此时并不需要将实现类注入spring容器中,大家可以简单理解为就是普通的Java类;

服务端

服务端主要的职责将需要服务发布到容器中;

public class ServerTest {
    public static void main(String[] args) {
        JaxWsServerFactoryBean jaxWsServerFactoryBean = new JaxWsServerFactoryBean();
        //设置服务地址
        jaxWsServerFactoryBean.setAddress("http://localhost:8999/cxfServer_01");
        //设置服务类
        jaxWsServerFactoryBean.setServiceClass(HelloWorldServiceImpl.class);
        //闯创建服务
        Server server = jaxWsServerFactoryBean.create();
        //启动服务
        server.start();
    }
}

客户端

public class ClientTest {
    public static void main(String[] args) {
        JaxWsProxyFactoryBean jaxWsProxyFactoryBean = new JaxWsProxyFactoryBean();
        jaxWsProxyFactoryBean.setAddress("http://localhost:8999/cxfServer_01");
        jaxWsProxyFactoryBean.setServiceClass(HelloWorldService.class);

        HelloWorldService helloWorldService = (HelloWorldService)jaxWsProxyFactoryBean.create();
        String world = helloWorldService.getHelloWorld("溪源", 24);
        System.out.println(world);

    }
}

注意,客户端肯定不需要知道服务具体的实现类,故jaxWsProxyFactoryBean.setServiceClass(HelloWorldService.class);
设置服务接口,从设计层面对外部也不会提供具体的实现,肯定对外部提供接口访问;

运行

从服务端console中可以看到服务是运行在jetty中,非tomcat中,故上面依赖中要引入jetty,否则报错。
在这里插入图片描述
然后看下客户端console,得到服务端的响应结果:
在这里插入图片描述

彩蛋

地址栏输入:http://localhost:8999/cxfServer_01
在这里插入图片描述
地址栏输入:http://localhost:8999/cxfServer_01?wsdl
在这里插入图片描述
下一篇文章将解释这个XML中具体标签的含义,敬请期待!!!