博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CXF创建webservice客户端和服务端
阅读量:7010 次
发布时间:2019-06-28

本文共 4327 字,大约阅读时间需要 14 分钟。

hot3.png

原创作品,允许转载,转载时请务必以超链接形式标明文章 、作者信息和本人声明。否则将追究法律责任。
作者: 地址:

一、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

下载地址:   (取自己需要的jar包)

三、创建webservice服务端

1、先将jar包放入lib目录

2、在web.xml中配置CXF框架的核心servlet

CXFServlet
org.apache.cxf.transport.servlet.CXFServlet
1
CXFServlet
/services/*

3、在applicationContext.xml中导入xml,并且发布webservice服务。

4、定义webservice接口FacelookWebService 和 实现类FacelookWebServiceImpl。

@WebServicepublic interface FacelookWebService {		/**	 * 根据传递的条件获取相册信息	 * xml的格式规范	 * 
*
*
*
*
*
*
*
*
* 这里的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
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 = "
" + "
" + "
" + "
" + "
" + "
" + "
" + "
" + "
"; 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
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 = "
" + "
" + "
" + "
" + "
" + "
" + "
" + "
" + "
"; //paramvalue为参数值 Object[] objects=client.invoke(name,xmlStr); //调用web Service//输出调用结果 System.out.println(objects[0].toString());}
在这里面传递的xml规范由 服务端自己规范好了,然后去解析、获取参数,执行相应的操作,返回想要的结果给调用的客户端。。

转载于:https://my.oschina.net/kt431128/blog/324068

你可能感兴趣的文章
React从入门到精通系列之(15)不可控组件
查看>>
与Susan Fowler探讨生产就绪微服务之问答
查看>>
JCP EC投票反对Java平台模块系统
查看>>
Liftbridge为NATS提供了类Kafka的日志API
查看>>
Realm为Node.js发布对象数据库
查看>>
[译] 如何运用新技术提升网页速度和性能
查看>>
全域赋能和智慧全球,阿里巴巴大数据技术前瞻与案例
查看>>
90%炒币者亏钱,区块链“撒币时代”结束了
查看>>
冬天来了,让Sleep System智能床垫帮你暖床!
查看>>
2017洛客大会成功落幕, 全球“洛客”开启“想象力时代”
查看>>
关于区块链革命你必须知道的事实
查看>>
开源 |蚂蚁金服启动分布式中间件开源计划,用于快速构建金融级云原生架构...
查看>>
Go语言之基准测试
查看>>
win10_x64更新错误解决: 安装一些更新时出现问题,但我们稍后会重试。如果持续出现这些问题,并且你想要搜索Web或联系支持人员以获取相关信息,以下信息可能会对你有帮助:...
查看>>
keepalived vrrp_script的一些实例配置
查看>>
《数字逻辑设计与计算机组成》一 3.4 减法器
查看>>
Chrome浏览器也开启Material Design风格
查看>>
《系统分析与设计方法及实践》一2.1 软件生命周期
查看>>
Oracle Logminer 日志挖掘
查看>>
印媒:全球科技巨头竞相角逐印度“智能城市”项目
查看>>