当前访客身份:游客 [ 登录  | 注册加入尚学堂]
启用新域名sxt.cn
新闻资讯

apache CXF实战

goldbin 发表于 2年前  | 评论(2 )| 阅读次数(1204 )|   0 人收藏此文章,   我要收藏
摘要 Apache CXF 是一个开源的 Services 框架,CXF 帮助您利用 Frontend 编程 API 来构建和开发 Services ,像 JAX-WS 。这些 Services 可以支持多种协议,比如:SOAP、XML/HTTP、RESTful HTTP 或者 CORBA ,并且可以在多种传输协议上运行,比如:HTTP、JMS 或者 JBI,CXF 大大简化了 Services 的创建,同时它继承了 XFire 传统,一样可以天然地和 Spring 进行无缝集成。

CXF特点

灵活部署

轻量级容器:可在 Tomcat 或基于 Spring 的容器中部署 Services;集成 JBI:可以在如 ServiceMix, OpenESB  or Petals 等等的 JBI 容器中将它部署为一个服务引擎;集成 SCA:可以部署在如 Tuscany 之类的 SCA 容器中;集成 J2EE:可以在 J2EE   应用服务器中部署 Services,比如:Geronimo、JOnAS、JBoss、WebSphere Application Server 和 WebLogic Application Server,以及 Jetty 和 Tomcat;独立的 Java   客户端/服务器。

支持多种编程语言

全面支持 JAX-WS 2.0   客户端/服务器编程模型;支持 JAX-WS 2.0 synchronous、asynchronous 和 one-way API's;支持 JAX-WS 2.0 Dynamic Invocation Interface (DII) API;支持 wrapped and non-wrapped 风格;支持 XML messaging API;支持 JavaScript 和 ECMAScript 4 XML (E4X) ,客户端与 服务端均支持;通过 Yoko 支持 CORBA;通过 Tuscany 支持 SCA;通过 ServiceMix 支持 JBI ;

代码生成

Java to WSDL;WSDL to Java;XSD to WSDL;WSDL to XML;WSDL to SOAP;WSDL to Service;
CXF 框架支撑环境
CXF   框架是一种基于 Servlet 技术的 SOA 应用开发框架,要正常运行基于 CXF 应用框架开发的企业应用,除了 CXF 框架本身之外,还需要 JDK 和 Servlet 容器的支持。

步骤1:下载

从官方网站http://cxf.apache.org/download.html 下载2.7版本的。下载之后解压,可以看到lib目录下有很多的jar。

步骤2:开发服务端

建立一个web项目导入jar包。导入lib目录下的所有jar。写一个接口如下:

package com.bjsxt.cxf.service;

import javax.jws.WebService;

@WebService
public interface HelloManager {

	public String sayHello(String str);
	
	public void play(int i);
}


提供一个接口的实现类:

package com.bjsxt.cxf.service.impl;

import javax.jws.WebService;

import com.bjsxt.cxf.service.HelloManager;

@WebService(endpointInterface="com.bjsxt.cxf.service.HelloManager")
public class HelloManagerImpl implements HelloManager{

	public String sayHello(String str) {
		System.out.println(str);
		return "调用成功,返回给客户端";
	}

	public void play(int i) {
		System.out.println("客户端传入:"+i);
	}
}


CXF可以和spring整合在一起。所以配置spring的配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xmlns:context="http://www.springframework.org/schema/context"
             xmlns:aop="http://www.springframework.org/schema/aop"
             xmlns:util="http://www.springframework.org/schema/util"
             xmlns:cache="http://www.springframework.org/schema/cache"
             xmlns:jee="http://www.springframework.org/schema/jee"
             xmlns:tx="http://www.springframework.org/schema/tx"
             xmlns:jaxws="http://cxf.apache.org/jaxws"
             xsi:schemaLocation="http://www.springframework.org/schema/beans
                     http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
                     http://www.springframework.org/schema/context
                     http://www.springframework.org/schema/context/spring-context-3.2.xsd
                     http://www.springframework.org/schema/aop
                     http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
                     http://www.springframework.org/schema/util
                     http://www.springframework.org/schema/util/spring-util-3.2.xsd
                     http://www.springframework.org/schema/cache
                     http://www.springframework.org/schema/cache/spring-cache-3.2.xsd
                     http://www.springframework.org/schema/jee
                     http://www.springframework.org/schema/jee/spring-jee-3.2.xsd
                     http://www.springframework.org/schema/tx
                     http://www.springframework.org/schema/tx/spring-tx-3.2.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-servlet.xml"/>
    <jaxws:endpoint id="helloWorld" implementor="com.bjsxt.cxf.service.impl.HelloManagerImpl" address="/hw"/>
</beans>

注意: address:表示服务的访问地址。implementor:一定要填写接口的实现类。
然后在web.xml中启动springICO。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
 
 <context-param>
	    <param-name>contextConfigLocation</param-name>
	    <param-value>classpath:spring.xml</param-value>
	</context-param>
	  <!-- 初始化spring IOC -->
	  <listener>
	    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	 <servlet>
        <servlet-name>cxf</servlet-name>
        <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>cxf</servlet-name>
        <url-pattern>/myservice/*</url-pattern>
    </servlet-mapping>
  <display-name>cxfTest</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
</web-app>


这样服务器就开发好了。然后可以部署到tomcat之后,通过浏览器可以打开地址:http://localhost:8080/cxf/myservice。如下图:

点击其中的WSDL超连接可以看到如下图:

服务器运行成功。

步骤3:客户端开发——手动开发客户端(一)

建立一个其他的项目也可以在同一个项目中开发。首先新建spirng的配置文件:


<jaxws:client id="client" serviceClass="com.bjsxt.cxf.service.HelloManager"
                  address="http://192.168.1.23:8080/cxf/myservice/hw" />

然后写一个测试类:

	public static void main(String[] args) {
		ApplicationContext ctx =new ClassPathXmlApplicationContext("spring.xml");
		HelloManager hm = (HelloManager) ctx.getBean("client");
		String result =hm.sayHello("HelloWorld");
		System.out.println(result);
		
	}

步骤3:客户端开发——自动生成客户端(二)

cmd进入apache-cxf目录下的bin目录。里面有一些可执行文件。执行命令如下图:

D:\>cd 360安全浏览器下载

D:\360安全浏览器下载>cd apache-cxf-2.7.11

D:\360安全浏览器下载\apache-cxf-2.7.11>cd bin

D:\360安全浏览器下载\apache-cxf-2.7.11\bin>wsdl2java http://localhost:8080/cxf/m
yservice/hw?wsdl

D:\360安全浏览器下载\apache-cxf-2.7.11\bin>

这样就会生成客户端代码,把客户端代码拷贝到项目中,如下图:

 

 

分享到:0
关注微信,跟着我们扩展技术视野。每天推送IT新技术文章,每周聚焦一门新技术。微信二维码如下:
微信公众账号:尚学堂(微信号:bjsxt-java)
声明:博客文章版权属于原创作者,受法律保护。如果侵犯了您的权利,请联系管理员,我们将及时删除!
(邮箱:webmaster#sxt.cn(#换为@))
北京总部地址:北京市海淀区西三旗桥东建材城西路85号神州科技园B座三层尚学堂 咨询电话:400-009-1906 010-56233821
Copyright 2007-2015 北京尚学堂科技有限公司 京ICP备13018289号-1 京公网安备11010802015183