`
s00n
  • 浏览: 20335 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

[转]使用 Spring 和 Apache CXF 设计和实现 POJO Web 服务,第 1 部分: 使用 CXF 和 Spring 创建 Web 服务

阅读更多

2008 年 9 月 18 日

使用开放源代码 Web 服务框架 Apache CXF 可以很容易地创建传统 Java™ 对象(plain old Java object ,POJO)样式的 Web 服务。本文是本系列的第 1 部分,将向您介绍如何使用 Spring 和 CXF 将 POJO 作为 Web 服务公开。本文还将演示 CXF 与 Spring 框架的集成。
<!-- START RESERVED FOR FUTURE USE INCLUDE FILES--><!-- include java script once we verify teams wants to use this and it will work on dbcs and cyrillic characters --> <!-- END RESERVED FOR FUTURE USE INCLUDE FILES-->

引言

在本文中,您将使用 CXF 和 Spring 来构建和开发一个订单处理 Web 服务。该 Web 服务处理或验证客户所下的订单,并返回唯一的订单 ID。阅读本文之后,您将能够应用 CXF 的概念和功能来构建和开发 Web 服务。

系统要求

要运行本文中的示例,请确保已在计算机上安装和设置了以下软件:

  • Java 5 或更高版本
  • Tomcat 5 或更高版本
  • Ant 构建工具
  • CXF 二进制分发版 2.1

安装上述分发版以后,设置以下环境变量:

  • JAVA_HOME(用于 Java)
  • CATALINA_HOME(用于 Tomcat)
  • ANT_HOME(用于 Ant)
  • CXF_HOME(用于 CXF)

举例来说,可以设置 CXF_HOME=C:\apache-cxf-2.1 并将以下内容添加到 PATH 环境变量:

  • JAVA_HOME\bin
  • CATALINA_HOME\bin
  • ANT_HOME\bin

 




回页首


为什么选择 CXF?

Apache CXF 是一个开放源代码框架,提供了用于方便地构建和开发 Web 服务的可靠基础架构。它允许创建高性能和可扩展的服务,您可以将这样的服务部署在 Tomcat 和基于 Spring 的轻量级容器中,以及部署在更高级的服务器上,例如 Jboss、IBM® WebSphere® 或 BEA WebLogic。

功能

该框架提供了以下功能:

  • Web 服务标准支持: CXF 支持以下 Web 服务标准:
    • Java API for XML Web Services (JAX-WS)
    • SOAP
    • Web 服务描述语言(Web Services Description Language ,WSDL)
    • 消息传输优化机制(Message Transmission Optimization Mechanism,MTOM)
    • WS-Basic Profile
    • WS-Addressing
    • WS-Policy
    • WS-ReliableMessaging
    • WS-Security
  • 前端建模: CXF 提供了前端建模的概念,允许您使用不同的前端 API 来创建 Web 服务。API 允许您使用简单的工厂 Bean 并通过 JAX-WAS 实现来创建 Web 服务。它还允许您创建动态 Web 服务客户端。
  • 工具支持: CXF 提供了用于在 Java Bean、Web 服务和 WSDL 之间进行转换的不同工具。它提供了对 Maven 和 Ant 集成的支持,并无缝地支持 Spring 集成。
  • RESTful 服务支持: CXF 支持代表性状态传输(Representational State Transfer,RESTful )服务的概念,并支持 Java 平台的 JAX-RS 实现。(本系列的第 2 部分将提供有关 RESTful 服务的更多信息。)
  • 对不同传输和绑定的支持: CXF 支持不同种类的传输,从 XML 到逗号分隔值 (CSV)。除了支持 SOAP 和 HTTP 协议绑定之外,它还支持 Java Architecture for XML Binding (JAXB) 和 AEGIS 数据绑定。
  • 对非 XML 绑定的支持: CXF 支持非 XML 绑定,例如 JavaScript Object Notation (JSON) 和 Common Object Request Broker Architecture (CORBA)。它还支持 Java 业务集成(Java Business Integration,JBI)体系架构和服务组件体系架构(Service Component Architecture,SCA)。

 




回页首


开发 Web 服务

下面让我们深入地研究一下如何使用 JAX-WS 前端创建订单处理 Web 服务,然后将其注册为 Spring Bean。您将使用代码优先方法,这意味着您将首先开发一个 Java 类,并将其标注为 Web 服务。为此,您通常要执行以下步骤:

  1. 创建服务端点接口(service endpoint interface,SEI),并定义一个将公开为 Web 服务的方法。
  2. 创建实现类,并将其标注为 Web 服务。
  3. 创建 beans.xml,并使用 JAX-WS 前端将该服务类定义为 Spring Bean。
  4. 创建 web.xml 以集成 Spring 和 CXF。

首先让我们创建订单处理 Web 服务 SEI。

创建订单处理 Web 服务 SEI

创建名为 OrderProcess 的 SEI,它将具有一个方法 processOrder ,此方法接受一个订单 Bean 并返回一个字符串。processOrder 方法的目的是处理客户所下的订单,并返回唯一的订单 ID。


清单 1. OrderProcess SEI

                
package demo.order;

import javax.jws.WebService;

@WebService
public interface OrderProcess {
  String processOrder(Order order);
}

 

从清单 1 中可以看到,OrderProcess SEI 只是一个被标注为 Web 服务的标准 Java 接口。@WebService 标注只是使该接口成为 Web 服务接口。客户端或使用者使用该接口来调用服务方法。OrderProcess SEI 具有一个服务方法 processOrder ,此方法接受 Order 作为参数,并作为字符串返回订单 ID。


清单 2. OrderProcess 服务实现

                
package demo.order;

import javax.jws.WebService;

@WebService(endpointInterface = "demo.order.OrderProcess")
public class OrderProcessImpl implements OrderProcess {

 public String processOrder(Order order) {
  return order.validate();
 }
}

 

编写 SEI 的实现

要编写前一部分中的 SEI 的实现,您同样要将您的实现类 OrderProcessImpl 标注为 Web 服务,并提供属性 endpointInterface ,其值为前一步中创建的 SEI 的完全限定名称。这告诉该类实现 OrderProcess SEI。由于它是 SEI 的实现,您必须提供返回订单 ID 的 processOrder 方法的实现。

您已经创建了一个 SEI 及其实现。使用 CXF,现在您可以使用 JAX-WS 前端使其成为实际的服务组件。


清单 3. beans.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"
 xsi:schemaLocation="
http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">

 <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="orderProcess" 
  implementor="demo.order.OrderProcessImpl" 
  address="/OrderProcess" />
	  
</beans>

 

创建 CXF 的配置文件

CXF 配置文件实际上是包含 Bean 定义的 Spring 配置文件。您将使用 JAX-WS 前端配置来为 OrderProcess Web 服务创建 Bean 定义。beans.xml 文件中的 <jaxws:endpoint> 标记将 OrderProcess Web 服务指定为 JAX-WS 端点。这实际上意味着 CXF 在内部使用 JAX-WS 来发布此 Web 服务。您必须提供实现类名称,即 OrderProcessImpl ,以及 <jaxws:endpoint> 标记的地址。您提供的地址与 Web 上下文有关。


清单 4. web.xml Web 配置文件

                
<web-app>
 <context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>WEB-INF/beans.xml</param-value>
 </context-param>

 <listener>
  <listener-class>
   org.springframework.web.context.ContextLoaderListener
  </listener-class>
 </listener>

 <servlet>
  <servlet-name>CXFServlet</servlet-name>
  <display-name>CXF Servlet</display-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>

 

最后,您需要执行以下操作:

  • 创建 web.xml 文件,此文件加载 CXF 配置文件。
  • 使用 Spring 上下文加载器来加载配置文件。
  • 注册 CXFServlet 以处理来自客户端程序的所有请求。

您刚才已完成了必需的服务器端组件的开发。现在您可以开发向 OrderProcess 服务发出请求的客户端组件。

 




回页首


开发客户端

从清单 5 中可以看到,创建客户端 Bean 是非常容易的,就像创建服务端点一样容易。JaxWsProxyFactory 用于创建 OrderProcess Web 服务的客户端 Bean。工厂 Bean 预期获得服务类 (OrderProcess ) 和您的服务的 URL。然后通过使用工厂 Bean 引用来创建客户端 Bean 存根 OrderProcess


清单 5. client-bean.xml 客户端 Web 配置文件

                
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:jaxws="http://cxf.apache.org/jaxws"
 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/schema/jaxws.xsd">

 <bean id="client" class="demo.order.OrderProcess" 
  factory-bean="clientFactory" factory-method="create"/>
	
 <bean id="clientFactory" class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">
  <property name="serviceClass" value="demo.order.OrderProcess"/>
  <property name="address" value="http://localhost:8080/orderapp/OrderProcess"/>
 </bean>
	  
</beans>

 

您将创建 Java 主程序,它使用 Spring 上下文来获取已定义的客户端 Bean,然后调用 processOrder 方法。


清单 6. 客户端代码

                
public final class Client {

 public Client() {
 }

 public static void main(String args[]) throws Exception {
  ClassPathXmlApplicationContext context 
   = new ClassPathXmlApplicationContext(new String[] 
     {"demo/order/client/client-beans.xml"});

  OrderProcess client = (OrderProcess)context.getBean("client");
    Order order = new Order();

  String orderID = client.processOrder(order);
  System.out.println("Order ID: " + orderID);
  System.exit(0);
 }
}





回页首


运行程序

在运行程序之前,请在您的 C:\ 盘根文件夹下创建如图 1 所示的目录结构,并将本文介绍的组件放在其中:

  • Java 代码放入包文件夹中。
  • beans.xml 和 web.xml 放入 web\web-inf 文件夹中。
  • client-beans.xml 将放入 demo\order\client 文件夹中。


图 1. 代码目录结构
代码目录结构

对于构建、部署和运行 OrderProcess Web 服务和客户端,您将使用 Ant 工具。代码将部署在 Tomcat 服务器上。在 c:\orderapp 文件夹下使用 ant deploy 命令来部署代码。

应用程序文件夹 (c:\orderapp) 具有 Ant 构建文件。在运行上述命令之后,您的 orderapp 代码将作为 orderapp.war 文件部署在 Tomcat 服务器环境中。现在通过在 CATALINA_HOME\bin 文件夹下提供 catalina start 命令来启动 Tomcat Web 服务器。

orderapp 文件夹创建在 Tomcat 的 webapps 文件夹之下。启动服务器之后,通过输入 ant client 命令来运行该应用程序。输出将显示订单 ID(请参见图 2)。


图 2. 程序输出
程序输出

结束语

本文简要描述了 CXF 框架的功能,并演示了它如何使您无需多少代码编写工作即可创建 Web 服务。您了解了使用 Bean 上下文文件的 Spring 与 CXF 的集成。您还研究了该框架如何将创建 Web 服务基础结构组件的实际语义抽象出来,并为您提供一个仅集中于 Web 服务创建的更简单的 API 外壳。

现在您已经了解了使用 CXF 来创建 Web 服务的基础,请继续关注本系列的第 2 部分,其中将向您介绍如何使用 CXF 和 Spring 将 POJO 公开为 Restful 服务。

分享到:
评论

相关推荐

    Apache CXF + Spring3 + REST + JSON配置

    Apache CXF是一个开源的服务框架,它允许开发人员创建和消费Web服务。Spring框架则是一个广泛使用的Java企业级应用开发框架,提供了丰富的功能,包括依赖注入、面向切面编程以及容器管理。REST(Representational ...

    webServiceSprin整合jar包apache-cxf-2.5.9.rar

    CXF允许开发者使用POJO(Plain Old Java Object)来定义服务接口和实现,使得代码更加简洁易懂。 在Spring框架中整合Apache CXF,可以利用Spring的强大依赖注入(DI)和AOP(面向切面编程)能力,实现服务的解耦和...

    java cxf +sping

    Apache CXF 是一款开源的 Web 服务框架,它允许开发者创建和部署各种类型的 Web 服务,包括 SOAP 和 RESTful。CXF 提供了丰富的功能,如 WSDL 首先开发(WSDL-first)和 Java 首先开发(Java-first),以及对 JAX-WS...

    cxf-2.7.18

    1. **服务实现与调用**:CXF提供了两种方式来实现Web服务,即JAX-WS(Java API for XML Web Services)和JAX-RS(Java API for RESTful Web Services)。开发者可以通过注解或者XML配置文件轻松地将Java类绑定到Web...

    webservice cxf包

    CXF是Apache组织开发的一个开源项目,它是一个强大的Web服务框架,支持SOAP、RESTful、WS-*等标准,使得开发者能够方便地创建和使用Web服务。 在“webservice CXF包”中,包含的主要内容有Apache CXF的jar包和实例...

    在web项目中新增或者添加webservice服务

    4. **配置服务**:使用框架提供的注解(如Apache CXF的`@WebService`)来标记接口和实现类,并配置服务端点(endpoint)地址。 5. **部署服务**:将服务打包到Web应用中,然后部署到服务器(如Tomcat、Jetty)。 *...

    webservices

    综上所述,"webservices"这个主题涉及到Web服务的基本概念,特别是利用Apache CXF 2.7.10框架创建和消费Web服务的方法,包括客户端代码的生成、服务的调用以及各种高级功能的实现。理解并掌握这些知识点,对于在企业...

    asix2,xFire,cxf优缺点

    它对Spring框架的良好支持使集成变得更加平滑,允许开发人员轻松创建和消费Web服务。CXF的数据绑定支持也更加广泛,包括XMLBeans、JiBX、JaxME、JaxBRI以及自定义的ADB。尽管JaxME和JaxBRI仍处于实验阶段,但这种...

    CXF WebService 开发指南、技术文档

    CXF与Spring框架的集成非常紧密,可以通过Spring管理CXF服务的生命周期,配置服务和客户端组件。 1. **配置CXF Bean**: - 在Spring配置文件中定义`jaxWsEndpointBean`或`cxfEndpointBean`。 2. **启动服务**: - ...

    CXF 经典开发例子

    CXF提供了便捷的方式来创建和调用RESTful及SOAP Web服务,并且可以很容易地与其他Java EE规范集成,如JAX-RS、JAX-WS等。 #### 三、Spring+CXF整合概述 Spring框架以其强大的IoC容器和AOP功能,在Java企业级应用...

    webservice教程(xfire+spring)

    Spring和XFire的集成使得开发者能够无缝地在Spring应用中创建和消费Web服务。 【XFire的工作流程】 XFire的工作流程分为请求处理和响应发送两个阶段。请求阶段包括:传输(Transport)、预转发(PreDispatch)、...

    cxfwebservice

    使用这个实例,你可以学习如何在Eclipse中设置CXF项目,创建服务接口和实现,配置服务发布,以及如何运行和测试Web服务。同时,它还展示了JAX-WS和POJO两种模式的差异和应用场景,这对于深入理解和应用CXF ...

    Exporting beans as web services using XFire

    虽然现代的Web服务框架(如Spring Boot和Apache CXF)提供了更高级的功能和更好的性能,但XFire作为历史的见证,为我们揭示了Web服务早期实现的基本原理。通过学习和实践XFire,开发者可以更好地理解Web服务的工作...

    xfire-distribution-1.2.6

    尽管XFire在后期被Apache CXF所吸收,但它的设计理念和创新对现代Web服务框架仍有深远影响。如果你正在处理一个旧项目或者研究历史上的Web服务实现,xfire-distribution-1.2.6资源包提供了了解和使用XFire所需的一切...

    java调用wsdl接口源码-cxf-plus:apachecxf在支持通用数据类型方面的增强

    简化集成,针对目前大多数服务使用SpringFramework的特点,自动查找JAX-WS和JAX-RS注解进行服务发布,用户只需配置一个Servlet即可发布WebService。 运维支持:支持在日志输出报文,报文格式化等,便于开发调试。...

    Camel示例说明

    8. **CXF Proxy Example**:演示了如何使用Camel通过CXF代理Web服务,实现服务的动态路由和管理。 9. **CXF Tomcat Example**:说明了如何使用Camel在Tomcat中部署代码优先的Web服务,利用CXF作为Web应用的一部分。...

    apache-camel-demo

    Apache Camel是一个基于规则路由和中介引擎,提供企业集成模式的Java对象(POJO)的实现,通过应用程序接口(或称为陈述式的Java领域特定语言(DSL))来配置路由和中介的规则。领域特定语言意味着Apache Camel支持你...

    xfire 运行所需jar

    “xifre小例子”标签可能指的是包含的一些示例代码或项目,这些示例通常会展示如何使用XFire创建和调用Web服务。通过这些示例,开发者可以快速理解XFire的工作原理和API用法,从而加速开发过程。 4. **完整项目...

    apache camel 简介

    在实际使用中,Apache Camel 可以通过Spring加载XML配置文件(如camel-context.xml)或者直接在程序中创建和配置CamelContext对象来启动。例如,下面的代码片段展示了如何添加一个从JMS队列到文件系统的路由: ```...

Global site tag (gtag.js) - Google Analytics