cxf之一基础理论介绍_介绍CXF

本文深入介绍了Apache CXF,一个与Axis2和Metro不同的Web服务堆栈。CXF允许在不同的数据绑定技术间选择,特别强调了其对JAXB 2.x的支持。文章通过对比其他堆栈,展示了CXF的配置、客户端和服务器端使用,以及其与Spring框架的集成。文中还提供了示例代码和配置文件,帮助理解CXF的基础知识。
摘要由CSDN通过智能技术生成

CXF是来自Apache Software Foundation的另一个Web服务堆栈,位于Axis2堆栈之后。 尽管它们来自同一组织,但Axis 2和CXF在配置和交付Web服务时采用了截然不同的方法。 在本文中,您将学习将JAXB 2.x和JAX-WS 2.x用于Web服务与CXF一起使用的基础知识,并且将看到CXF与其他JAXB / JAX-WS堆栈(Axis2和地铁-在先前的文章中讨论过。

CXF基础知识比较

在用户界面方面,CXF与Axis2和Metro Web服务堆栈有很多共同点。 这三个堆栈都使您可以从现有的Java™代码开始构建Web服务,或者从WSDL Web服务描述开始并生成Java代码以使用或实现该服务。 与其他堆栈一样,CXF将服务操作建模为方法调用,并将服务端口类型建模为接口。

与Axis2一样,但与Metro不同,CXF允许您在不同的数据绑定技术之间进行选择。 CXF对JAXB 2.x数据绑定的支持与Metro相当,并且优于Axis2,因为它允许您从WSDL生成代码时使用JAXB定制(Axis2则不)。 CXF还允许您使用其他数据绑定方法,尽管对它们的支持不如Axis2更好地开发-特别是,只有在使用JAXB或XMLBeans数据绑定时,才可以使用CXF从WSDL生成代码。

与CXF一起使用的首选服务配置技术(或CXF术语中的frontend )是通常由XML配置文件补充的JAX-WS 2.x注释。 CXF中对JAX-WS批注的支持与Metro相当,因此它比Axis2更适合JAX-WS的使用(如Axis2中的JAXB和JAX-WS所述,在使用JAX-WS方面存在一些主要限制) )。 与其他JAX-WS实现一样,CXF要求服务WSDL在运行时可供客户端使用。

与其他堆栈一样,CXF使用由可配置组件组成的请求和响应处理流。 CXF调用组件拦截器 ,而不是处理程序 ,但是除这些术语外,它们是等效的组件。 与Metro一样,CXF作为基本下载的一部分完整地支持WS-Security和其他扩展技术。 与Metro不同,CXF JAR是模块化的,这意味着您可以根据所使用的技术来选择要包含在应用程序中的JAR(CXF安装中的/ lib / WHICH_JARS文件会告诉您各种常用的JAR。用例)。 这种模块化的缺点是,您最终可能会获得一长串应用程序所需的特定JAR列表。 从好的方面来说,它使您可以减小部署的规模。

同样类似于Metro,CXF通常要求您为Web服务构建WAR文件,而不是将潜在的许多服务部署到单个服务器安装中(与Axis2一起使用的方法)。 CXF还以Jetty服务器的形式提供了一个适合生产使用的集成HTTP服务器。 与Axis2和Metro中集成的简单HTTP服务器支持相比,这为您提供了更加灵活和强大的替代方案。

样品申请

代码下载提供了本系列以前的文章中使用的简单库管理服务的版本。 修改这一示例以演示CXF的用法。 与早期版本一样,WSDL服务定义定义了四个操作:

  • getBook检索由国际标准书号(ISBN)标识的特定书的详细信息。
  • getBooksByType检索特定类型的所有书籍的详细信息。
  • getTypes查找可用的书籍类型。
  • addBookaddBook添加到库中。

在“ Axis2中的JAXB和JAX-WS”中 ,您了解了该应用程序在Axis2中的工作方式,然后在“ Introducing Metro ”中,您在Metro中对其进行了了解。 早期文章中的大多数讨论也适用于使用CXF。 除了服务名称和端点地址外,WSDL相同。 生成的JAXB数据模型是相同的,甚至生成的服务类也相同,除了Java包和JAX-WS批注中使用的服务名称。

客户端使用

CXF上的示例应用程序的客户端代码与在Axis2或Metro上使用JAX-WS相同,并且构建步骤非常相似:只需使用CXF wsdl2java工具代替JAX-WS参考实现wsimport工具。 有关代码和处理的详细信息,请参见“ Axis2中的JAXB和JAX-WS ”。

尽管客户端代码相同,但是CXF的客户端行为存在一个显着差异。 默认情况下,CXF将令人讨厌的日志详细信息打印到控制台。 CXF使用Java日志记录,因此,为避免出现此输出,您需要将系统属性设置为指向日志记录属性文件,并且将其设置更改为仅输出WARNINGSEVERE信息。 示例应用程序的Ant build.xml使用JVM参数行<jvmarg value="-Djava.util.logging.config.file=${build-dir}/logging.properties"/>

服务器端使用

CXF上的示例应用程序的服务器端代码也与在Axis2或Metro上使用JAX-WS相同,并且构建过程与Metro非常相似。 使用Axis2,您可以通过创建包含服务和数据模型类的JAR文件来准备部署服务,然后通过将该JAR放到Axis2服务器安装中的WEB-INF / servicejars目录中来部署服务。 使用Metro和CXF,您需要创建一个WAR文件,其中包含服务和数据模型类,Metro或CXF库JAR和一对配置文件(其中两个堆栈中的一个文件的名称不同)。 WEB-INF / web.xml文件配置实际的servlet处理。 清单1中显示了用于示例应用程序的版本:

清单1.示例应用程序web.xml
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee">
  <display-name>CXFLibrary</display-name>
  <description>CXF Library Service</description>
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
      classpath:META-INF/cxf/cxf.xml
      classpath:META-INF/cxf/cxf-extension-soap.xml
      classpath:META-INF/cxf/cxf-servlet.xml
     </param-value>
  </context-param>
  <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>/*</url-pattern>
  </servlet-mapping>
</web-app>

清单1的 WEB-INF / web.xml文件只是一个标准的servlet配置文件,告诉Web应用程序服务器(例如Tomcat)如何与Servlet应用程序接口。 细节类似于那些在新城例如,尽管对于CXF的<servlet-class>是CXF码和的一部分<listener-class>引用一Spring框架类(请参阅相关主题 )。 与Metro实例一样,该servlet被配置为处理所有到达此Web应用程序的请求(通过<url-pattern>/</url-pattern>条目)。

单独的文件WEB-INF / cxf-servlet.xml用于配置CXF,以将servlet接收的请求路由到服务实现代码,并按需提供服务WSDL。 清单2中显示了该文件:

清单2.示例应用程序cxf-servlet.xml
<beans xmlns="http://www.springframework.org/schema/beans"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns:jaxws="http://cxf.apache.org/jaxws"
      xmlns:soap="http://cxf.apache.org/bindings/soap"
      xsi:schemaLocation="
         http://www.springframework.org/schema/beans
         http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
         http://cxf.apache.org/jaxws
         http://cxf.apache.org/schemas/jaxws.xsd">

    <jaxws:endpoint
        id="Processor"
        implementor="com.sosnoski.ws.library.cxf.CXFLibraryImpl"
        wsdlLocation="WEB-INF/wsdl/library.wsdl"
        address="/">
    </jaxws:endpoint>
</beans>

清单2的 WEB-INF / cxf-servlet.xml文件使用实现类,要为请求匹配的模式以及WSDL文档位置定义了一个端点。 WSDL文档位置是此端点定义的唯一可选部分。 如果未在cxf-servlet.xml文件中为服务端点指定WSDL,则CXF将在运行时基于JAX-WS批注自动生成一个WSDL。

构建并运行示例代码

在尝试示例代码之前,您需要在系统上下载并安装最新版本的CXF(请参阅参考资料 )。 示例代码已在2.2.5版本中进行了测试。 您还需要在解压缩的样本代码下载的根目录中编辑build.properties文件,以将cxf-home属性的值更改为CXF安装的路径。 如果要在其他系统或端口上的服务器上进行测试,则可能需要更改host-namehost-port

要使用提供的Ant build.xml构建示例应用程序,请打开控制台到下载代码的根目录,然后键入ant 。 这将首先调用CXF wsdl2java工具(包含在CXF发行版中),然后编译客户端和服务器,最后将服务器代码打包为WAR。 然后,您可以将生成的cxf-library.war文件部署到测试服务器,最后在控制台上键入ant run来尝试运行示例客户端。 样本客户端通过对服务器的一系列请求序列,为每个请求打印简要结果。 如客户端使用中所述 ,该版本配置CXF日志记录,以避免在运行示例客户端时打印配置详细信息。

CXF的春天

注意清单2 cxf-servlet.xml配置文件中Spring Framework bean配置的使用。 您可能知道,Spring是一个开放源代码应用程序框架,其中包含许多可用于组装应用程序的组件库。 控制反转(IoC)容器是Spring框架的原始基础。 它允许您链接和配置JavaBean风格的软件组件,使用Java反射在运行时访问bean对象的属性。

Spring IoC容器通常使用XML文件获取依赖项信息, 清单2中的cxf-servlet.xml文件就是这种Spring配置的示例。 <beans>元素只是单个bean配置的包装。 <jaxws:endpoint>元素就是这样一个bean,CXF将其与特定类型的对象( org.apache.cxf.jaxws.EndpointImpl实例)相关联。

除了在此简单示例中使用的选项外,您还可以在cxf-servlet.xml文件中指定许多其他选项,包括服务的消息流配置。 有关完整的详细信息,请参见CXF文档中的JAX-WS配置信息(在Frontends / JAX-WS下)。

除了JAX-WS批注之外,Spring还用于CXF堆栈的所有配置,包括CXF内部的消息流的组织。 在大多数情况下,这些配置详细信息是使用直接包含在CXF JAR中的XML配置文件自动处理的(请参阅清单1 web.xml文件中的contextConfigLocation参数值以了解如何引用它们),但是您可以覆盖或添加到使用您自己的配置文件的常见流程。 本系列文章不会直接讨论这一点。 您可以查看CXF文档以获取详细信息。

未来还有更多CXF

在本文中,您已经了解了在CXF Web服务堆栈中使用JAXB 2.x数据绑定和基于JAX-WS 2.x注释的配置的基础。 只需对构建进行较小的更改并使用不同的部署配置文件,以前的文章中使用Axis2和Metro堆栈的相同JAXB / JAX-WS代码也可以在CXF中使用。 跨堆栈兼容性是使用JAXB和JAX-WS的主要好处,因为它使您可以轻松地在堆栈之间进行切换。

除了这个简单的示例所显示的,CXF还有很多其他功能,并且在以后的文章中,您将了解其他一些功能。 下一篇文章将着眼于使用WS-Security,因此您可以看到CXF实现与Axis2和Metro的比较。


翻译自: https://www.ibm.com/developerworks/java/library/j-jws12/index.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值