CXF创建webservice客户端和服务端
转
一、CXF的介绍
Apache CXF是一个开源的WebService框架,CXF大大简化了Webservice的创建,同时它继承了XFire的传统,一样可以和spring天然的进行无缝的集成。CXF框架是一种基于servlet技术的SOA应用开发框架,要正常运用基于CXF应用框架开发的企业应用,除了CXF应用本身之外,还需要JDK和servlet容器的支持。
二、CXF的准备条件
所需要的jar包:
xmlbeans-2.4.0.jar
wss4j-1.5.9.jar
jetty-server-7.1.6.v20100715.jar
jetty-util-7.1.6.v20100715.jar
geronimo-ws-metadata_2.0_spec-1.1.3.jar
geronimo-activation_1.1_spec-1.1.jar
geronimo-servlet_3.0_spec-1.0.jar
velocity-1.6.4.jar
jaxb-xjc-2.2.1.1.jar
xml-resolver-1.2.jar
wsdl4j-1.6.2.jar
cxf-2.3.0.jar
XmlSchema-1.4.7.jar
jaxb-api-2.2.1.jar
jaxb-impl-2.2.1.1.jar
neethi-2.0.4.jar
geronimo-annotation_1.0_spec-1.1.1.jar
geronimo-stax-api_1.0_spec-1.0.1.jar
下载地址:http://download.csdn.net/detail/ch656409110/5748183 (取自己需要的jar包)
三、创建webservice服务端
1、先将jar包放入lib目录
2、在web.xml中配置CXF框架的核心servlet
- <!-- CXF -->
- <servlet>
- <servlet-name>CXFServlet</servlet-name>
- <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
- <load-on-startup>1</load-on-startup>
- </servlet>
- <servlet-mapping>
- <servlet-name>CXFServlet</servlet-name>
- <url-pattern>/services/*</url-pattern>
- </servlet-mapping>
3、在applicationContext.xml中导入xml,并且发布webservice服务。
- <?xml version="1.0" encoding="UTF-8"?>
- <beans
- xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:p="http://www.springframework.org/schema/p"
- xmlns:tx="http://www.springframework.org/schema/tx"
- xmlns:aop="http://www.springframework.org/schema/aop"
- xmlns:jaxws="http://cxf.apache.org/jaxws"
- xmlns:jaxrs="http://cxf.apache.org/jaxrs"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
- http://www.springframework.org/schema/tx
- http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
- http://www.springframework.org/schema/aop
- http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
- http://cxf.apache.org/jaxws
- http://cxf.apache.org/schemas/jaxws.xsd
- http://cxf.apache.org/jaxrs
- http://cxf.apache.org/schemas/jaxrs.xsd
- "
- default-autowire="byName"
- >
- <import resource="classpath:META-INF/cxf/cxf.xml" />
- <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
- <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
- <!-- <jaxws:endpoint id="facelookWebService" address="/facelookWebService" implementor="com.facelook.webservice.server.FacelookWebServiceImpl"></jaxws:endpoint> -->
- <!-- 不知道为什么,这里的webservice配置,只能用bean来实现,否则 注入的service为空。但是之前有个项目却可以,百思不得其解。。 -->
- <bean id="facelookWebService" class="com.facelook.webservice.server.FacelookWebServiceImpl"/>
- <jaxws:endpoint id="facelookWebService1" address="/facelookWebService" implementorClass="com.facelook.webservice.server.FacelookWebServiceImpl">
- <jaxws:implementor ref="facelookWebService"/>
- </jaxws:endpoint>
- </beans>
4、定义webservice接口FacelookWebService 和 实现类FacelookWebServiceImpl。
- @WebService
- public interface FacelookWebService {
- /**
- * 根据传递的条件获取相册信息
- * xml的格式规范
- * <?xml version=\"1.0\" encoding=\"UTF-8\"?>
- * <facelook>
- * <condition>
- * <name></name>
- * <description></description>
- * <pageno></pageno>
- * <pagesize></pagesize>
- * </condition>
- * </facelook>
- * 这里的WebParam必须指定,否则调用的时候返回null
- * @return
- */
- public String getAlbumList(@WebParam(name="xmlStr") String xmlStr);
- }
- @WebService
- //这后面的可以不写注释后面的配置,在applicationContext配置也一样(serviceName="facelookWebService",endpointInterface="com.facelook.webservice.server.FacelookWebService")
- public class FacelookWebServiceImpl implements FacelookWebService{
- @Autowired
- private AlbumService albumService;
- @Override
- public String getAlbumList(String xmlStr) {
- try {
- List<Album> albumList = getAlbumPage(xmlStr);
- JSONArray jsonArray = JSONArray.fromObject(albumList);
- return jsonArray.toString();
- } catch (Exception e) {
- e.printStackTrace();
- }
- return null;
- }
- }
这样子,基本上就可以了。
5、保存代码,发布项目,启动tomact。
在地址栏输入:http://localhost:8080/house/services/houseWebService?wsdl 即可看到发布的服务端的明细。
显示如下:
这就表示CXF发布的webservice服务端成功了。
6、通过客户端调用服务端webservice。
axis的客户端访问:
- public static void main(String[] args) throws ServiceException, RemoteException, MalformedURLException {
- String xmlStr = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
- + " <facelook>"
- + " <condition>"
- + " <name>家</name>"
- + " <description></description>"
- + " <pageno></pageno>"
- + " <pagesize></pagesize>"
- + " </condition>"
- + " </facelook>";
- Service service = new Service();
- Call call = (Call) service.createCall();
- call.setTargetEndpointAddress("http://localhost:8080/facelook/services/facelookWebService?wsdl");
- QName qName = new QName("http://server.webservice.facelook.com/", "getAlbumList");
- call.setOperationName(qName);
- call.setUseSOAPAction(true);
- //这下面两行一定要加上,否则接收在服务器端收不到。
- call.addParameter("xmlStr", XMLType.XSD_STRING, ParameterMode.IN);
- call.setReturnType(XMLType.XSD_STRING);
- String result = (String) call.invoke(new Object[] { xmlStr });
- System.out.println(result);
- //将返回的字符串转换成list集合
- //JSONArray array = JSONArray.fromObject(result);
- //List<Album> list = JSONArray.toList(array,Album.class);
- }
CXF客户端访问:
- public static void main(String[] args) throws Exception {
- //这个是用cxf 客户端访问cxf部署的webservice服务
- //千万记住,访问cxf的webservice必须加上namespace ,否则通不过
- //现在又另外一个问题,传递过去的参数服务端接收不到
- JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
- org.apache.cxf.endpoint.Client client = dcf.createClient("http://localhost:8080/facelook/services/facelookWebService?wsdl");
- //url为调用webService的wsdl地址
- QName name=new QName("http://server.webservice.facelook.com/","getAlbumList");
- //namespace是命名空间,methodName是方法名
- String xmlStr = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
- + " <facelook>"
- + " <condition>"
- + " <name>家</name>"
- + " <description></description>"
- + " <pageno></pageno>"
- + " <pagesize></pagesize>"
- + " </condition>"
- + " </facelook>";
- //paramvalue为参数值
- Object[] objects=client.invoke(name,xmlStr);
- //调用web Service//输出调用结果
- System.out.println(objects[0].toString());
- }
在这里面传递的xml规范由 服务端自己规范好了,然后去解析、获取参数,执行相应的操作,返回想要的结果给调用的客户端。。
CXF创建webservice客户端和服务端的更多相关文章
- Axis创建webservice客户端和服务端
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本人声明.否则将追究法律责任. 作者:永恒の_☆ 地址:http://blog.csdn.net/chenghui0317/ ...
- 13.Axis创建webservice客户端和服务端
转自:https://blog.csdn.net/chenghui0317/article/details/9318317 一.Axis的介绍 Web Service是现在最适合实现SOA的技术,而A ...
- 【转】SoapUI5.0创建WebService接口模拟服务端
原文:http://blog.csdn.net/a19881029/article/details/26348627 使用SoapUI创建WebService接口模拟服务端需要接口描述文件 MathU ...
- SoapUI5.0创建WebService接口模拟服务端(转)
转载自:https://blog.csdn.net/a19881029/article/details/26348627 使用SoapUI创建WebService接口模拟服务端需要接口描述文件 Mat ...
- 【JMeter4.0学习(三)】之SoapUI创建WebService接口模拟服务端以及JMeter对SOAP协议性能测试脚本开发
目录: 创建WebService接口模拟服务端 下载SoapUI 新建MathUtil.wsdl文件 创建一个SOAP项目 接口模拟服务端配置以及启动 JMeter对SOAP协议性能测试脚本开发 [阐 ...
- 使用Axis2编写webservice客户端,服务端
1.编写客户端 Axis2开发WebService客户端 的3种方式 [参考帖子] http://blog.csdn.net/wangjinwei6912/article/details/851259 ...
- 使用GSoap开发WebService客户端与服务端
Gsoap 编译工具提供了一个SOAP/XML 关于C/C++ 语言的实现, 从而让C/C++语言开发web服务或客户端程序的工作变得轻松了很多. 用gsoap开发web service的大致思路 我 ...
- idea+maven+spring+cxf创建webservice应用(二)生成客户端程序
idea+maven+spring+cxf创建webservice应用(二)生成客户端程序,以上一篇为基础"idea+maven+spring+cxf创建webservice应用" ...
- 用cxf创建webservice服务端
用cxf创建webservice 1:在eclipse里面创建动态web工程,注意,Dynamic web module version取2.5,3.0未测试过待验证: 2:下载cxf相关的jar包, ...
随机推荐
- JavaScript怎样学
嘿,我最近接到一个 Web 项目,不过老实说,我这两年没怎么接触 Web 编程,听说 Web 技术已经发生了一些变化.听说你是这里对新技术最了解的 Web 开发工程师? 准确地说,我是一名「前端工程师 ...
- Django的RestfulAPI框架RestFramework
Django的Restful-API框架 安装框架 #sudo pip3 install django #sudo pip3 install markdown #sudo pip3 install d ...
- httpWebRequest获取流和WebClient的文件抓取
httpWebRequest获取流和WebClient的文件抓取 昨天写一个抓取,遇到了一个坑,就是在获取网络流的时候,人为的使用了stream.Length来获取流的长度,获取的时候会抛出错误,查了 ...
- 【BZOJ1478】Sgu282 Isomorphism Pólya定理神题
[BZOJ1478]Sgu282 Isomorphism 题意:用$m$种颜色去染一张$n$个点的完全图,如果一个图可以通过节点重新标号变成另外一个图,则称这两个图是相同的.问不同的染色方案数.答案对 ...
- mysql bin-logrow模式,base64转正常sql
可以通过以下命令查看日志是否开启查看 show global variables like '%log%'; 当bin-log的模式设置为row时 不仅日志长得快 , 并且查看执行的sql时 , 也稍 ...
- html的base标签
提示:请把 <base> 标签排在 <head> 元素中第一个元素的位置,这样 head 区域中其他元素就可以使用 <base> 元素中的信息了. 注释:如果使用了 ...
- Pandas的loc方法
当你读取到DataFrame的数据时,想去定位某一个数据项,可以使用loc方法进行查找,之后你可以赋值给他. import pandas as pd df = pd.read_csv('file_na ...
- Java不同压缩算法的性能比较 程序猿 2015-01-21 本文将会对常用的几个压缩算法的
Java不同压缩算法的性能比较 程序猿 2015-01-21 本文将会对常用的几个压缩算法的
- Alpine Linux
Alpine Linux Docker镜像基于Alpine Linux操作系统,后者是一个面向安全的轻型Linux发行版.不同于通常Linux发行版,Alpine Linux采用了musl libc和 ...
- Catch---hdu3478(染色法判断是否含有奇环)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3478 题意:有n个路口,m条街,一小偷某一时刻从路口 s 开始逃跑,下一时刻都跑沿着街跑到另一路口,问 ...