Web service是一个平台独立的,低耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的互操作的应用程序。
Web Service技术, 能使得运行在不同机器上的不同应用无须借助附加的、专门的第三方软件或硬件, 就可相互交换数据或集成。依据Web Service规范实施的应用之间, 无论它们所使用的语言、 平台或内部协议是什么, 都可以相互交换数据。Web Service是自描述、 自包含的可用网络模块, 可以执行具体的业务功能。Web Service也很容易部署, 因为它们基于一些常规的产业标准以及已有的一些技术,诸如标准通用标记语言下的子集XML、HTTP。Web Service减少了应用接口的花费。Web Service为整个企业甚至多个组织之间的业务流程的集成提供了一个通用机制。
Java中webservice的服务端有Endpoint类来实现
Endpoint.publish(“address”,”service类”)
Service接口和实现需要加注解@Webservice
然后通过address就能访问到该webservice的wsdl
Cxf框架核心包有:cxf-core
依赖包有:cxf-rt-transports-http-jetty
cxf-rt-frontend-jaxws
其中 jaxws包中有一个 JaxWsServerFactoryBean可以构建服务端工厂bean
JaxWsServerFactoryBean factoryBean = new JaxWsServerFactoryBean();
//webservice暴露ip jdk实现
//Endpoint.publish(“http://192.168.204.1/helloService“, helloService);
//webservice暴露ip
factoryBean.setAddress(“http://192.168.204.1/helloService“);
//设置服务类
factoryBean.setServiceClass(HelloService.class);
//服务类实现
factoryBean.setServiceBean(helloService);
//创建server
factoryBean.create();
要注意的是 service中的复杂bean,比如Map
差别就是 一个记录在服务端 一个是记录在客户端 ,记录的日志都是交互时产生的,in out是相反的。
自定义拦截器:
Cxf中可以通过factoryBean来加入自定义拦截器,自定义拦截器需要实现Interceptor或者继承其子类
在server中可以对请求调用方法之前进行拦截,并处理一些类似登陆的校验,重写父类handleMessage方法,可以通过参数soapmessage 来获得header 并对其做相应的处理。
在client中可以在请求发送前进行拦截,可以处理一些公共的添加header之类的方法,这里做了请求头中添加用户账号密码节点的处理。
CXF整合Spring:
添加spring核心依赖包,添加CXF核心依赖包
applicationContext.xml中增加cxf命名空间,增加cxf官方提供的托管bean的
在service实现类上加上@Component(“/url”)注解
并且在spring配置文件中加上对service包的扫描
在spring配置文件中加上服务提供配置
在web.xml中添加spring配置加载和spring监听器,添加cxf的servlet映射,将所有webservice的请求交给org.apache.cxf.transport.servlet.CXFServlet
最后在spring配置文件中添加拦截器配置
最终applicationContext.xml和web.xml如下图: