CXF框架
一.WebService与CXF简介
1、WebService概述
WebService是一种跨编程语言和跨利用系统平台的远程调用技能。
跨编程语言和跨利用平台 就是说服务端步调接纳java编写,客户端步调则可以接纳其他编程语言编写,反之亦然!
跨利用系统平台则是指服务端步调和客户端步调可以在差别的利用系统上运行。
远程调用 就是一台盘算机a上的一个步调可以调用到别的一台盘算机b上的一个对象的方法,譬如,银联提供给商场的pos刷卡系统,商场的POS机转账调用的转账方法的代码其实是跑在银行服务器上。
再比如,amazon,天气预报系统,淘宝网,校内网,百度等把自己的系统服务以WebService服务的形式暴露出来,让第三方网站和步调可以调用这些服务功能,这样扩展了自己系统的市场占有率。
服务端:把公司内部系统的业务方法发布成WebService服务,供远程他人调用
客户端:调用别人发布的WebService服务
1.1常见的远程变更技能:
(1)Socket 套接字 TCP/IP UDP
(2)WebService
(3)http 调用
(4)RMI( 远程方法调用 ) Hessian 框架(二进制RPC协议传输数据)
1.2、WebService 的特点:
(1)跨平台,跨语言
(2)W3C(万维网同盟)制定的尺度
(3)可以穿透防火墙(因为 soap 协议是基于 HTTP 协议)
SOAP 协议(简单对象访问协议Simple Object Access Protocol):
WebService通过HTTP协议发送请求和吸收效果时,发送的请求内容和效果内容都接纳XML格式封装,并增加了一些特定的HTTP消息头,以说明HTTP消息的内容格式,这些特定的HTTP消息头和XML内容格式就是SOAP协议
SOAP协议 = HTTP协议 + XML数据格式
WSDL
(Web Services Description Language)就是基于XML的语言,用于形貌Web Service及其函数、参数和返回值。
它是WebService客户端和服务器端都能明白的尺度格式。
因为是基于XML的,所以WSDL既是呆板可阅读的,又是人可阅读的,这将是一个很大的利益。
一些最新的开发工具既能根据你的Web service生成WSDL文档,又能导入WSDL文档,生成调用相应WebService的署理类代码。
2、CXF
CXF,apache 下的 WebService 的开源框架。
Apache CXF = Celtix + Xfire,开始叫 Apache CeltiXfire,厥后更名为 Apache CXF了,以下简称为 CXF。
Apache CXF 是一个开源的 web Services 框架,CXF 资助您构建和开发 web Services ,它支持多种协议,
比如:SOAP1.1,1,2、XML/HTTP、REST HTTP 或者 CORBA。
灵活的部署:可以运行有 Tomcat,Jboss,weblogic,Jetty(内置)上面。
2.1 CXF入门Demo
(1)需求分析
我们这里是实现一个简单的天气预报的案例。
注意,我们不是做真正的天气预报,而是一个假的信息。通报都会名称,如果是北京返回雾霾,否则返回晴。
我们开发需要开发服务端和客户端。
(2)服务端开发
1)创建maven工程,名称为cxfserver,打包方式为war
2)pom.xml添加依赖以及相关插件
- 4.0.0 com.itzheng cxfServer 0.0.1-SNAPSHOT war org.apache.cxf cxf-rt-frontend-jaxws 3.1.10 org.apache.cxf cxf-rt-transports-http 3.1.10 org.springframework spring-beans 4.2.4.RELEASE org.springframework spring-web 4.2.4.RELEASE org.apache.maven.plugins maven-compiler-plugin 2.3.2 1.7 1.7 org.apache.tomcat.maven tomcat7-maven-plugin 9090 /cxf
复制代码 3)编写服务接口和服务类
IWeatherService
- package com.itzheng.cxfserver;import javax.jws.WebService;/* * 天气服务接口 */@WebServicepublic interface IWeatherService { //根据都会返回天气信息 String info(String city);}
复制代码 WeatherService
- public class WeatherService implements IWeatherService { @Override public String info(String city) { if("北京".equals(city)) { return "雾霾"; } return "晴天"; }}
复制代码 4)设置web.xml文件
- org.springframework.web.context.ContextLoaderListener contextConfigLocation classpath*:applicationContext*.xml cxf org.apache.cxf.transport.servlet.CXFServlet cxf /ws/*
复制代码 5)编写applicationContext-cxf.xml文件
(3)运行项目访问:
访问一:http://localhost:9090/cxf/ws/weatherService?wsdl
访问二:http://localhost:9090/cxf/ws/weatherService?wsdl=IWeatherService.wsdl
运行显示效果
分析上述返回信息:从下往上看
(4)客户端开发
1)创建Maven工程(jar)cxfclient
检察项目文件路径
2)根据 WSDL 生资本地代码
3) 开启cmd:命令行进入项目目次src/main/java目次下:
返回工程当中并刷新工程
自动生成一些类和方法
4)cxfclient/pox.xml当中引入依赖
- 4.0.0 com.itzheng cxfServer 0.0.1-SNAPSHOT war org.apache.cxf cxf-rt-frontend-jaxws 3.1.10 org.apache.cxf cxf-rt-transports-http 3.1.10 org.springframework spring-context 4.2.4.RELEASE junit junit 4.11 test org.apache.maven.plugins maven-compiler-plugin 2.3.2 1.7 1.7
复制代码 5)编写 spring(cxf)设置文件applicationContext_cxf.xml
6)创建测试类,在测试目次下
- package com.itzheng.cxf.test;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.itzheng.cxfserver.impl.IWeatherService;public class CXFTest { @Test public void clientTest() { ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:applicationContext_cxf.xml"); IWeatherService ws = (IWeatherService)ac.getBean("weatherClient"); System.out.println(ws.info("北京")); System.out.println(ws.info("深圳")); }}
复制代码 7)运行效果
来源:https://blog.csdn.net/qq_44757034/article/details/111869428
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |