首先谈论一下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中具体标签的含义,敬请期待!!!