CXF简介

  Apache CXF = Celtix + XFire,开始叫 Apache CeltiXfire,后来更名为 Apache CXF 了。CXF 继承了 Celtix 和 XFire 两大开源项目的精华,提供了对 JAX-WS 全面的支持,并且提供了多种 Binding 、DataBinding、Transport 以及各种 Format 的支持,并且可以根据实际项目的需要,采用代码优先(Code First)或者 WSDL 优先(WSDL First)来轻松地实现 Web Services 的发布和使用。Apache CXF已经是一个正式的Apache顶级项目。

  Apache CXF 是一个开源的 Services 框架,CXF 帮助您利用 Frontend 编程 API 来构建和开发 Services ,像 JAX-WS 。这些 Services 可以支持多种协议,比如:SOAP、XML/HTTP、RESTful HTTP 或者 CORBA ,并且可以在多种传输协议上运行,比如:HTTP、JMS 或者 JBI,CXF 大大简化了 Services 的创建,同时它继承了 XFire 传统,一样可以天然地和 Spring 进行无缝集成。

  CXF优点

  (1)支持多种协议:

    SOAP1.1,1.2

    XML/HTTP

    CORBA(Common Object Request Broker Architecture公共对象请求代理体系结构,早期语言使用的WS。C,c++,C#)

  (2)可以与Spring进行快速无缝的整合

  (3)灵活的部署:可以运行在Tomcat,Jboss,Jetty(内置),IBMWS,BeaWL上面。

  看这个之前可以看看关于WebService的文章:链接http://www.cnblogs.com/xiaobai1226/p/7543965.html

  接下来就开始写一个CXF的简单入门程序

  一、服务端程序

  首先去官网下载jar包

  官方下载网址:http://cxf.apache.org/download.html

  进入此页面后,会看到此页面

 

  下载好后会看到这样一个压缩文件:

  解压后,有这些目录文件

  下面简单介绍一下这些目录以及里面文件的作用

   (1)bin:是 CXF 框架中所提供的代码生成、校验、管理控制台工具:

   (2)docs:CXF 所有类(class)对应的 API 文档,为开发者使用 CXF 完成应用开发提供应有的帮助。

   (3)etc:包含一个基本的 Service 暴露所需要的 web.xml 文件,及其它的配置文件。

   (4)lib:目录中包含 CXF 及其运行时所需要的和可选的第三方支持类包(.jar 文件),可以根据不同项目所需的 CXF 特性选择所需要的支持类包。

   (5)licenses:列表了引用第三方 jar 包的相关许可协议。

   (6)samples:samples 目录中包含了所有随 CXF 二进制包发布的示例,包含这些示例的源代码和相关 Web 应用配置文件,可以方便地用 Ant 来编译运行测试这些示例,来了解 CXF 的开发和使用的方法。可以通过 samples 目录和它各个子目录下的 README.txt 的文件来详细了解示例的编译与运行的步骤。

   (7)LICENSE :文件中包含了 CXF 框架的授权协议 Apache License Version 2.0 。

   (8)NOTICE :罗列了 CXF 框架用到的相关第三方组件的授权协议以其它的相关信息。

   (9)README :文件中包含了 CXF 框架本身的一些简要说明。

     (10)release_notes.txt :包含了 CXF 发布时的一些信息,包括运行时所需要的环境,修复 BUG 的列表等。

  接下来,第一步:创建动态web项目

  第二步:导入CXF相关jar包,以下jar包是使用CXF所必须的jar包(CXF能运行起来最基本的jar包)

  第三步:在web.xml中配置CXF框架提供的一个Servlet

  1. <!-- 配置CXF框架提供的Servlet -->
  2. <servlet>
  3. <servlet-name>cxf</servlet-name>
  4. <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
  5. <!-- 通过初始化参数指定CXF框架的配置文件位置 -->
  6. <init-param>
  7. <param-name>config-location</param-name>
  8. <param-value>classpath:cxf.xml</param-value>
  9. </init-param>
  10. </servlet>
  11. <servlet-mapping>
  12. <servlet-name>cxf</servlet-name>
  13. <url-pattern>/service/*</url-pattern>
  14. </servlet-mapping>

  第四步:在类路径下提供cxf.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:jaxws="http://cxf.apache.org/jaxws"
  5. xmlns:soap="http://cxf.apache.org/bindings/soap"
  6. xsi:schemaLocation="http://www.springframework.org/schema/beans
  7. http://www.springframework.org/schema/beans/spring-beans.xsd
  8. http://cxf.apache.org/bindings/soap
  9. http://cxf.apache.org/schemas/configuration/soap.xsd
  10. http://cxf.apache.org/jaxws
  11. http://cxf.apache.org/schemas/jaxws.xsd">
  12.  
  13. </beans>

  第五步:开发一个接口和实现类

  接口,接口上必须使用@WebService实现类(jdk1.6及以后才支持@WebService注解,所以要确保jdk版本够高)

  1. import javax.jws.WebService;
  2.  
  3. @WebService
  4. public interface TestCXFService {
  5. public String firstCXF(String name);
  6. }

  实现类

  1. public class TestCXFServiceImpl implements TestCXFService{
  2. @Override
  3. public String firstCXF(String name) {
  4. System.out.println("基于CXF开发的服务端firstCXF被调用了");
  5. return "Hello "+name;
  6. }
  7. }

  第六步:在cxf.xml中注册服务

  1. <bean id="firstCXFService" class="com.cxf.service.impl.TestCXFServiceImpl"/>
  2. <!-- 注册服务 -->
  3. <jaxws:server id="myCXFService" address="/cxfService">
  4. <jaxws:serviceBean>
  5. <ref bean="firstCXFService"/>
  6. </jaxws:serviceBean>
  7. </jaxws:server>

  到现在,使用CXF配置的服务就配置成功了

  接下来,启动tomcat,在浏览器访问这个地址:http://localhost:8080/testCXF/service/cxfService?wsdl

  http://配置此服务的服务器ip地址 / 端口 / 你所创建的工程的名称 / 自己在web.xml配置的路径  / 自己配置的address?wsdl
  注意:(1)由于我使用tomcat所以端口号为8080
       (2)<url-pattern>/service/*</url-pattern>
       

(3)address="/cxfService"

  若出现这个页面说明成功了

  1. This XML file does not appear to have any style information associated with it. The document tree is shown below.
  2. <wsdl:definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://impl.service.cxf.com/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:ns2="http://schemas.xmlsoap.org/soap/http" xmlns:ns1="http://service.cxf.com/" name="TestCXFServiceImplService" targetNamespace="http://impl.service.cxf.com/">
  3. <wsdl:import location="http://localhost:8080/testCXF/service/cxfService?wsdl=TestCXFService.wsdl" namespace="http://service.cxf.com/"></wsdl:import>
  4. <wsdl:binding name="TestCXFServiceImplServiceSoapBinding" type="ns1:TestCXFService">
  5. <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
  6. <wsdl:operation name="firstCXF">
  7. <soap:operation soapAction="" style="document"/>
  8. <wsdl:input name="firstCXF">
  9. <soap:body use="literal"/>
  10. </wsdl:input>
  11. <wsdl:output name="firstCXFResponse">
  12. <soap:body use="literal"/>
  13. </wsdl:output>
  14. </wsdl:operation>
  15. </wsdl:binding>
  16. <wsdl:service name="TestCXFServiceImplService">
  17. <wsdl:port binding="tns:TestCXFServiceImplServiceSoapBinding" name="TestCXFServiceImplPort">
  18. <soap:address location="http://localhost:8080/testCXF/service/cxfService"/>
  19. </wsdl:port>
  20. </wsdl:service>
  21. </wsdl:definitions>

  二、客户端程序

  有两种方式:方式一:使用jdk提供的wsimport命令生成本地代码完成调用(另一篇介绍webservice的文章中有使用,链接在文章开头给出了,在这里不再使用)

        方式二:使用CXF提供的方式(我们使用第二种方式)    

  第一步:创建Java项目并导入CXF相关jar包 (jar包同上)

  第二步:使用wsimport或者CXF提供wsdl2java生成本地代码,只需要生成接口文件

  打开cmd进入CXF文件夹的bin目录下(如apache-cxf-3.2.0\bin),输入

  1. wsdl2java -d . -p com.cxf.client http://localhost:8080/testCXF/service/cxfService?wsdl

  .代表将生成的文件放到当前目录下,-p代表生成的目录结构,最后的地址代表根据哪个wsdl生成文件

  敲回车,出现以下结果,和方式一不同这个成功后,没有任何提示

  这时就发现,当前目录下出现了这个文件夹

  打开后,有以下目录文件,而我们只需要用到一个接口文件(红框标出来的)

  

  第三步:将接口文件复制到项目中

  

  复制过来后,我们需要将红框内内容删掉,因为我们只把一个接口文件复制过来了,其他的并没有动,所以找不到这个文件,而我们又用不到,所以直接删掉就好  

  删除后接口内代码是这样的

  1. package com.cxf.client;
  2.  
  3. import javax.jws.WebMethod;
  4. import javax.jws.WebParam;
  5. import javax.jws.WebResult;
  6. import javax.jws.WebService;
  7. import javax.xml.bind.annotation.XmlSeeAlso;
  8. import javax.xml.ws.RequestWrapper;
  9. import javax.xml.ws.ResponseWrapper;
  10.  
  11. /**
  12. * This class was generated by Apache CXF 3.2.0
  13. * 2017-09-24T12:35:54.073+08:00
  14. * Generated source version: 3.2.0
  15. *
  16. */
  17. @WebService(targetNamespace = "http://service.cxf.com/", name = "TestCXFService")
  18. @XmlSeeAlso({})
  19. public interface TestCXFService {
  20.  
  21. @WebMethod
  22. @RequestWrapper(localName = "firstCXF", targetNamespace = "http://service.cxf.com/", className = "com.cxf.client.FirstCXF")
  23. @ResponseWrapper(localName = "firstCXFResponse", targetNamespace = "http://service.cxf.com/", className = "com.cxf.client.FirstCXFResponse")
  24. @WebResult(name = "return", targetNamespace = "")
  25. public java.lang.String firstCXF(
  26. @WebParam(name = "arg0", targetNamespace = "")
  27. java.lang.String arg0
  28. );
  29. }

  第四步:提供spring配置文件,注册客户端代理对象

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:jaxws="http://cxf.apache.org/jaxws"
  5. xmlns:soap="http://cxf.apache.org/bindings/soap"
  6. xsi:schemaLocation="http://www.springframework.org/schema/beans
  7. http://www.springframework.org/schema/beans/spring-beans.xsd
  8. http://cxf.apache.org/bindings/soap
  9. http://cxf.apache.org/schemas/configuration/soap.xsd
  10. http://cxf.apache.org/jaxws
  11. http://cxf.apache.org/schemas/jaxws.xsd">
  12.  
  13. <!-- 注册CXF客户端代理对象,通过spring框架创建这个代理对象,使用代理对象实现远程调用 -->
  14. <jaxws:client id="myCXFClient" address="http://localhost:8080/testCXF/service/cxfService" serviceClass="com.cxf.client.TestCXFService">
  15.  
  16. </jaxws:client>
  17. </beans>

  第五步:写一个测试类,读取spring配置文件,创建spring工厂,从工厂中获取代理对象,实现远程调用

  1. package com.cxf.client;
  2.  
  3. import org.springframework.context.ApplicationContext;
  4. import org.springframework.context.support.ClassPathXmlApplicationContext;
  5.  
  6. public class TestCXFClient {
  7. public static void main(String[] args) {
  8. ApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:cxf.xml");
  9. TestCXFService proxy = (TestCXFService) ctx.getBean("myCXFClient");
  10. String result = proxy.firstCXF("my first CXFClient");
  11. System.out.println(result);
  12. }
  13. }

  执行main方法(此时要确保服务端启动着),出现以下结果,就证明程序运行成功了

  客户端控制台打印

        

  服务端控制台打印

        

  到现在,CXF入门程序就完成了。

  

  

Apache CXF入门的更多相关文章

  1. JAVAEE——BOS物流项目07:WebService入门、apache CXF入门、基于CXF发布CRM服务

    1 学习计划 1.WebService入门 n 什么是WebService n 调用网络上的WebService服务 n SOAP和WSDL概念 n 基于JDK1.7发布一个简单的WebService ...

  2. APACHE - CXF 入门详解

    ref: https://www.cnblogs.com/hoojjack/p/6724659.html

  3. Apache CXF Webservice入门

    1.步骤一览 关于CXF的介绍请移步官网.百科,这里仅供初次使用者入门. 2.步骤详情 2.1.环境准备 apache-cxf-3.0.0.zip下载 jdk1.7.0_51 Eclipse4.3.0 ...

  4. Apache CXF实现WebService入门教程(附完整源码)

    Apache CXF实现WebService非常简单实用,只需要几步就可以实现一个简单的web service. 首先我们需要新建一个maven项目,在pom中添加依赖和jetty作为测试的web s ...

  5. CXF 入门:创建一个基于WS-Security标准的安全验证(CXF回调函数使用,)

    http://jyao.iteye.com/blog/1346547 注意:以下客户端调用代码中获取服务端ws实例,都是通过CXF 入门: 远程接口调用方式实现 直入正题! 以下是服务端配置 ==== ...

  6. Web Service与Apache CXF 框架

    一.WebService简介 为了支持跨网络的机器间相互操作交互而设计,用于开发分布式的互操作的应用程序组件. Web Service服务通常被定义为一组模块化的API,它们可以通过网络进行调用,来执 ...

  7. apache CXF quickstart

    1下载 官网: cxf.apache.org 下载 CXF 的开发包: 解压上面的 zip 文件 : 2介绍 1什么是cxf Apache CXF™ is an open source service ...

  8. apache CXF Service 简单使用

    cxf介绍 框架官网:cxf.apache.org 支持多种协议: SOAP1.1,1.2 XML/HTTP CORBA(Common Object Request Broker Architectu ...

  9. Spring 4 集成Apache CXF开发JAX-RS Web Service

    什么是JAX-RS 在JSR-311规范中定义,即Java API for RESTful Web Services,一套Java API,用于开发 RESTful风格的Webservice. 工程概 ...

随机推荐

  1. 用PE安装操作系统时:无法创建新的系统分区 也无法定位现有系统分区 的解决办法

    借助U盘的用PE安装操作系统时系统提示:无法创建新的系统分区 也无法定位现有系统分区 的解决办法... --------------------------------- 具体原因是安装时加载到安装程 ...

  2. linux(一)之linux简介

    其实在前几天我使用的是csdn来写博客,尝试了一下,发现真的太浪费时间了.可能是自己不太习惯的原因吧.所以最后还是换回使用博客园.接下来给大家带来的是linux,大家听到这里linux感觉很神秘的样子 ...

  3. maven 搭建 SpringMVC + MyBatis(1)

    ·做了两年多Java Web一多半的项目都是SSM架构的,只搭建过两次,趁着周末做个总结整理. Eclipse搭建Maven项目 1.new project  --> Maven project ...

  4. java程序的内存分配

    java程序的内存分配 JAVA 文件编译执行与虚拟机(JVM)介绍 Java 虚拟机(JVM)是可运行Java代码的假想计算机.只要根据JVM规格描述将解释器移植到特定的计算机上,就能保证经过编译的 ...

  5. Java缓存类的实际应用场景

    不要着迷于技术,应把注意力放到问题上. 一个普通的后台管理系统,一定会有参数配置.参数配置数据表和其他的数据表是不同的,它的操作基本都是查的操作.参数配置的这些数据信息是贯穿在整个项目中,那么把他们放 ...

  6. System.Globalization.CultureInfo.InvariantCulture 解决不同地域字符串格式不同问题

    同样的DateTime.ToShortDateString()   在不同的地域输出格式不同 如在美国的 日期格式为 :  月-日-年 如在中国的 日期格式为 :  年-月-日 一些时候,这个格式就会 ...

  7. 基础知识(C#语法、数据库SQL Server)回顾与总结

    前言 已经有大概一个多月没有更新博客,可能是开始变得有点懒散了吧,有时候想写,但是又需要额外投入更多的时间去学习,感觉精力完全不够用啊,所以为了弥补这一个多月的潜水,决定写一篇,衔接9月未写博客的空缺 ...

  8. yyt

    红颜迤逦隔云梯, 相思萦系解花语. 我有相思千般意, 百磨不灭铭肝肠.

  9. 学号:201521123116 《java程序设计》第四周学习总结

    1. 本周学习总结 2. 书面作业 Q1. 注释的应用使用类的注释与方法的注释为前面编写的类与方法进行注释,并在Eclipse中查看.(截图)答:注释的插入:注释以/开始,以/结束类注释/**.... ...

  10. 201521123009 《Java程序设计》第13周学习总结

    1. 本周学习总结 2. 书面作业 1. 网络基础 1.1 比较ping www.baidu.com与ping cec.jmu.edu.cn,分析返回结果有何不同?为什么会有这样的不同? 从上图来看, ...