从IBM网站上看到就转载了,原文章地址
http://www.ibm.com/developerworks/cn/webservices/ws-pojo-springcxf/index.html
使用开放源代码 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 服务。为此,您通常要执行以下步骤:
- 创建服务端点接口(service endpoint interface,SEI),并定义一个将公开为 Web 服务的方法。
- 创建实现类,并将其标注为 Web 服务。
- 创建 beans.xml,并使用 JAX-WS 前端将该服务类定义为 Spring Bean。
- 创建 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 服务。
分享到:
相关推荐
标题“简单cxf+spring构建webservice服务”指的是使用Apache CXF框架与Spring框架结合来创建Web服务。Apache CXF是一个开源的Java框架,它允许开发者创建和消费各种Web服务,包括SOAP和RESTful风格。Spring框架则为...
使用CXF,我们可以快速地创建服务接口和服务实现,并将其暴露为HTTP端点。 **二、Spring框架** Spring是一个广泛应用的Java企业级应用框架,它简化了开发过程并提供了面向切面编程(AOP)的支持。在Web服务场景中,...
本篇文章将深入探讨CXF与Spring的结合,以及如何创建一个基于CXF和Spring的Web服务程序。 ### 1. CXF简介 CXF,全称CXF CXF,是 Continued eXtension Framework 的缩写,它的前身是XFire和Celtix两个项目。CXF不仅...
使用CXF+spring创建一个web的接口项目源代码,Myeclipse创建,部署到tomcat中即可访问。 与此对应的博客地址为:http://blog.csdn.net/zxnlmj/article/details/28880303
【标题】"cxf+spring+web"是一个基于Apache CXF和Spring框架构建的Web服务实现,用于创建和消费SOAP或RESTful服务。这个项目是一个基础的 HelloWorld 示例,展示了如何在Tomcat 6.0应用服务器上运行一个CXF Web服务...
在IT行业中,Web服务是应用程序之间进行通信的一种标准方法,而CXF和Spring都是Java生态系统中的关键组件。本文将深入探讨如何将CXF与Spring框架整合,以构建高效且灵活的Web服务解决方案。 首先,让我们了解CXF。...
2. **定义服务接口和服务实现**: 创建一个Java接口来定义Web服务的公共操作,然后实现该接口。例如: ```java public interface MyService { String sayHello(String name); } public class MyServiceImpl ...
3. **WSDL第一或第二方式**:CXF支持两种方式来创建Web服务:WSDL第一方式(合同先行)和第二方式(代码先行)。在WSDL第一方式中,先定义WSDL,然后自动生成Java接口和服务实现。而在WSDL第二方式中,先编写Java...
6. **安全配置**:如果需要,还可以使用Spring Security或者CXF的安全模块来保护Web服务,实现身份验证和授权。 7. **监控和日志**:通过Spring的AOP支持,可以轻松地添加日志和性能监控功能。CXF也提供了各种监控...
4. **创建Web服务**:使用CXF和Spring,开发者可以通过简单的注解或XML配置文件来声明服务接口和服务实现。CXF会自动生成WSDL文件,客户端可以根据这个文件生成代理类来调用服务。 5. **Spring整合CXF**:Spring...
【cxf+spring 使用经验】 Apache CXF 是一个开源的 Web 服务框架,它整合了 ...通过以上步骤,可以成功地使用 CXF+Spring 创建和使用 Web 服务。在实践中,不断学习和总结,将有助于提升开发效率和解决问题的能力。
CXF允许开发者通过Java编程模型或者基于XML的配置来创建Web Services,提供了一种简单而强大的方式来处理服务接口和服务实现。 ### 2. Spring简介 Spring框架是企业级Java应用的核心组件,它简化了依赖注入、AOP...
它支持SOAP、RESTful等多种服务模型,并且可以方便地与Spring框架集成,提供了一套完整的工具集来帮助开发者快速、高效地创建Web服务。 二、Spring框架介绍 Spring是Java领域最广泛使用的框架之一,它提供了一个...
CXF是一个开源的Web服务框架,它支持SOAP、RESTful等多种Web服务标准,而Spring框架则提供了强大的依赖注入、事务管理等功能,使得应用程序更加模块化和易于维护。本压缩包“cxf+spring”包含了这两者结合开发所需的...
在IT行业中,CXF和Spring框架的整合是创建高效、灵活的Web服务的重要途径。"cxf_spring 相关 jar"的标题暗示了这个压缩包包含的是用于整合CXF与Spring的Java库。让我们深入了解一下CXF、Spring以及它们如何协同工作...
在企业级应用开发中,Apache CXF 和 Spring 框架的整合是非常常见的,因为它们分别提供了强大的服务端和客户端的 Web 服务支持以及灵活的依赖注入和配置管理。本教程将详细介绍如何将 CXF 与 Spring 整合,帮助...
3. **cxf-rt-wsdl.jar**:WSDL(Web Service Description Language)解析库,用于读取和处理WSDL文件,以便生成服务端点和服务客户端代理。 4. **cxf-rt-bindings-soap.jar**:提供SOAP绑定支持,使得CXF能够将SOAP...
- **配置Spring上下文**:在Spring配置文件中定义CXF的服务器端点(Endpoint)和服务实现类,使用Spring的`<bean>`标签来管理这些对象。 - **服务接口与实现**:定义Web服务的接口,然后实现该接口。接口可以使用...
总结来说,"cxf+spring+client"涉及的是使用CXF和Spring框架创建Web服务客户端的实践。结合Spring MVC,我们可以构建一个完整的端到端解决方案,从用户界面接收请求,通过CXF客户端调用远程服务,再到返回结果给用户...
例如,使用`<jaxws:endpoint>`或`<jaxrs:server>`标签,可以轻松地创建和配置Web服务端点。这些标签允许开发者指定服务实现类、绑定地址、WSDL位置等关键属性。 2. **依赖注入**:CXF服务的实现类可以作为Spring的...