Web Service Apache CXF介绍和一个简单的使用例子

1、CXF介绍

CXF 框架是一种基于 Servlet 技术的 SOA 应用开发框架,要正常运行基于 CXF 应用框架开发的企业应用,除了 CXF 框架本身之外,还需要 JDK 和 Servlet 容器的支持。

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

JAX-RS: Java API for RESTful Web Services is a Java programming language API that provides support in creating web services according to the Representational State Transfer (REST) architectural style.

CXF supports JAX-RS (JSR-311), the Java API for RESTful Web Services. JAX-RS standardizes the way RESTful services can be developed in Java.

2、下载CXF:

可以从官网上进行下载:

http://cxf.apache.org/download.html

3、下面是一个JAX-RS实现的简单例子:

3.1、首先在Eclipse中创建一个Web项目。

把需要的Jar包引入到Web项目中,所有的JAR包都位于CXF解压文件的lib文件目录下。

3.2、添加部署描述符:

在web.xml文件中添加如下配置信息:


CXFServlet

org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet


jaxrs.serviceClasses

com.itzhai.book.BookService



jaxrs.providers



1


CXFServlet
/bookService/*

这个配置其实就是配置一个Servlet,这个Servlet是CXF的核心处理类,负责处理所有的请求。当请求的URL和servlet-mapping中的url-pattern中的url匹配时,则找到服务器中对应的Service进行处理。

这里配置了拦截以/bookService/开头的链接进行使用Service服务。

关于CXF在项目中的部署详细可以参考这篇文章:https://cwiki.apache.org/confluence/display/CXF20DOC/Servlet+Transport

3.3、接下来是编写服务器端的Service:

这里使用到了一个实体类Book:

public class Book {

private String bookName;
private String bookPrice;
private String author;

public String getBookName() {
    return bookName;
}
public void setBookName(String bookName) {
    this.bookName = bookName;
}
public String getBookPrice() {
    return bookPrice;
}
public void setBookPrice(String bookPrice) {
    this.bookPrice = bookPrice;
}
public String getAuthor() {
    return author;
}
public void setAuthor(String author) {
    this.author = author;
}

}

接下来是Service服务的编写:

@Path(“/bookService”)
public class BookService {

// private static Logger logger = LoggerFactory
// .getLogger(QuestionnaireService.class);

@POST
@Path("/getBookById/{id}")
@Produces("application/json")
public String getBookById(@PathParam("id") String id) {
    return "Core Java!";
}

@GET
@Path("/{qnid}/{name}")
@Produces("application/json")
public void addBook(
        @PathParam("qnid") String qnid, @PathParam("name") String name) {
}

}

这里以注解的形式把服务注册到Tomcat容器中,各注解的基本解释如下:

@Path:访问该Service的Service名
@POST @GET:访问该Service的某个方法时使用的HTTP请求方式
@Produces:访问Service中某个具体方法时需要提供的路径
@PathParam:从URL中传递过来的参数信息

如上面的Service如果需要访问getBookById方法则需要提供如下格式的链接:

bookService/getBookById/123

3.4、接下来就是在页面中获取请求了,我们可以使用Ajax请求,这里就使用YUI的Ajax请求作为例子:




获取您需要的图书






请输入图书编号:



关于YUI的使用可以参考这篇文章:YUI介绍以及快速入门 Yahoo的JS框架

arthinking wechat
欢迎关注itzhai公众号