`
zhangwei_david
  • 浏览: 474740 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

RESTful 使用CXF实现(一)

阅读更多

       代表性传输(Representational State Transfer,REST)在Web领域已经得到了广泛的应用。REST不是一种协议,而是一种体系风格。

       REST的具体实现应该遵循四个基本原则:

  1. 显示的使用Http 方法
  2. 无状态
  3. 公开目录结构式的URI
  4. 传输XML,JSON 或同时传输这两者

目前CXF框架有三种不同的方式支持REST风格的WebService.分别是JAX-RS,JAX-WS Provider& Dispatch和Http绑定方式。
下面使用的是JAX-RS 实现RESTful webservice

首先创建一个SEI

写道

import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.core.Response;

import com.test.project.Project;

@Path("/ProjectManager/")
public interface ProjectManager {
@GET
@Path("/getProjectName/")
public Response getProjectName();

@GET
@Path("/getProjectNameById/{projectID}/")
public Response getProjectNameById(@PathParam("projectID") String projectId);

@GET
@Path("/greeting/")
public Response greeting();

@PUT
@Path("/setDefaultProject/")
public Response setDefaultProject(Project project);

@POST
@Path("/registerProject/")
public Response registerProject(Project project);

@DELETE
@Path("/removeProject/{id}/")
public Response removeProject(@PathParam("id") String id);
}

 

实现这个接口

写道
import java.util.HashMap;
import java.util.Map;

import javax.ws.rs.Path;
import javax.ws.rs.core.Response;

import org.apache.log4j.Logger;

import restful.cxf.demo.webservice.ProjectManager;

import com.test.project.Project;

@Path("/ProjectManager/")
public class ProjectManagerImpl implements ProjectManager {

private static final Logger logger = Logger
.getLogger(ProjectManagerImpl.class);
private Map<String, Project> projectMap;
private Project project;

public ProjectManagerImpl() {
if (logger.isInfoEnabled()) {
logger.info("-------ProjectManagerImpl Construct------------");
}
initProject();
}

private void initProject() {
projectMap = new HashMap<String, Project>();
project = new Project();
project.setProjectID("default projectID");
project.setProjectName("default projectName");
project.setProjectDescribe("default projectDescribe");
Project prt = new Project();
prt.setProjectDescribe("projectDescibe2");
prt.setProjectID("project2");
prt.setProjectName("projectName2");
projectMap.put("1", project);
projectMap.put("2", prt);
}

public Response getProjectName() {
if (logger.isInfoEnabled()) {
logger.info("------invoking getProjectName----");
}
Response response;
if (project.getProjectName() == null) {
response = Response.notModified().build();
} else {
response = Response.ok(project.getProjectName()).build();
}
return response;
}

public Response getProjectNameById(String projectId) {
if (logger.isInfoEnabled()) {
logger.info("-----invoking getProjectNameById----------");
}
Response response = null;
if (projectId == null || !projectMap.containsKey(projectId)) {
response = Response.notModified().build();
} else {
response = Response.ok(projectMap.get(projectId).getProjectName())
.build();
}
return response;
}

public Response greeting() {
if (logger.isInfoEnabled()) {
logger.info("----- invoking greeting-------");
}
return Response.ok("Hello,This is ProjectManager.").build();
}

public Response setDefaultProject(Project project) {
if (logger.isInfoEnabled()) {
logger.info("---------invoking setDefaultProject------------");
}
Response response = null;
if (project == null) {
response = Response.notModified().build();
} else {
this.project = project;
response = Response.ok(this.project.getProjectName()).build();
}
return response;
}

public Response registerProject(Project project) {
if (logger.isInfoEnabled()) {
logger.info("-------- invoking registerProject----------");
}
Response response = null;
if (project == null || projectMap.containsKey(project.getProjectID())) {
response = Response.notModified().build();
} else {
projectMap.put(project.getProjectID(), project);
response = Response.ok(project.getProjectName()).build();
}
return response;
}

public Response removeProject(String id) {
if (logger.isInfoEnabled()) {
logger.info("---------invoking removeProject--------");
}
Response response;
if (id == null || !projectMap.containsKey(id)) {
response = Response.notModified().build();
} else {
projectMap.remove(id);
response = Response.ok("delete is ok.").build();
}
return response;
}

}

 发布服务

写道
public static void main(String[] args) throws InterruptedException {
testStart();
}

public static void testStart() throws InterruptedException {
ProjectManager projectManager = new ProjectManagerImpl();
JAXRSServerFactoryBean sf = new JAXRSServerFactoryBean();
sf.setResourceClasses(ProjectManager.class);
sf.setResourceProvider(ProjectManager.class,
new SingletonResourceProvider(projectManager));
sf.setAddress("http://localhost:9000/");
sf.create();
TimeUnit.MINUTES.sleep(15);
}

 

调用服务

http://localhost:9000/ProjectManager/getProjectNameById/2

 

 如果使用Servlet 方式又该如何发布呢?

<?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">
	<display-name>CXFServletDemo</display-name>
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>
			WEB-INF/weather-servlet.xml
			WEB-INF/restfulServer-beans.xml
		</param-value>
	</context-param>
	<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>/*</url-pattern>
	</servlet-mapping>
	<welcome-file-list>
		<welcome-file>index.html</welcome-file>
	</welcome-file-list>

</web-app>

 

写道
<?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:jaxrs="http://cxf.apache.org/jaxrs"
xmlns:cxf="http://cxf.apache.org/core"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/core
http://cxf.apache.org/schemas/core.xsd
http://cxf.apache.org/jaxrs
http://cxf.apache.org/schemas/jaxrs.xsd">

<import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath:META-INF/cxf/cxf-extension-jaxrs-binding.xml" />
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
<jaxrs:server id="projectManagerRestful"
serviceClass="restful.cxf.demo.webservice.impl.ProjectManagerImpl"
address="/" />
</beans>

 这样将项目放在Tomcat 中启动后即可以发布一个RESTful 风格的webservice

http://localhost:8080/cxf/ProjectManager/greeting

 

  • cxf.zip (78.4 KB)
  • 下载次数: 11
分享到:
评论

相关推荐

    cxf restful

    在本案例中,我们将深入探讨如何在不依赖Spring框架的情况下,仅使用CXF实现一个简单的RESTful服务,该服务能返回JSON格式的数据。 1. **CXF与RESTful服务**: RESTful是一种架构风格,强调资源的识别和通过HTTP...

    使用CXF开发RESTFul服务

    【描述】中的链接指向了一个ITEYE博客,虽然具体内容无法在当前环境中查看,但通常这样的博客会详细介绍如何使用CXF创建RESTful服务的步骤,可能包括以下方面: 1. **环境准备**:首先,需要在项目中引入CXF的依赖...

    CXF Restful服务简单例子

    CXF框架支持RESTful服务的实现,让我们来详细探讨如何使用CXF构建一个简单的RESTful服务。\n\n一、CXF简介\nApache CXF是一个强大的Java框架,提供了一种灵活的方式来构建和部署Web服务。它支持多种Web服务规范,...

    SpringBoot+Mybatis+CXF框架,实现Restful api与 WebService api接口的大实验

    描述:本实验使用SpringBoot、Mybatis和CXF框架来实现Restful API和WebService API接口的大实验,涵盖了数据库设计、 Maven依赖管理、Restful API和WebService API的实现等方面。 标签:spring boot、mybatis、...

    cxf实现restful资料

    总之,这份"使用Spring整合CXF发布RESTFul项目案例"资料将帮助你深入理解RESTful服务的实现,以及如何利用Spring和CXF这一强大组合来构建高效、灵活的REST服务。通过实践案例,你可以亲手尝试并掌握相关技能。

    cxf webservice restful实现

    在IT行业中,CXF是一个广泛使用的开源框架,用于构建和开发Web服务。它支持多种Web服务规范,包括SOAP和RESTful。本项目聚焦于利用CXF与Spring框架集成,实现RESTful风格的Web服务。REST(Representational State ...

    Spring CXF Restful 实例

    在IT行业中,Spring CXF是一个广泛使用的开源框架,它整合了Spring框架的功能和Apache CXF的服务堆栈,为开发人员提供了构建和实现Web服务的强大工具。在这个“Spring CXF Restful实例”中,我们将深入探讨如何利用...

    Jersey实现restful,CXF调用以及jquery AJAX调用

    本篇将详细介绍如何使用Jersey框架实现RESTful服务,以及如何通过CXF客户端进行调用,并探讨jQuery AJAX如何与这些服务进行交互。 1. **Jersey与RESTful服务** Jersey是Java平台上的一个开源项目,它是JAX-RS...

    在同一个系统里用cxf 实现SOAP 协议和RESTful风格 两种类型的webservice接口

    总之,Apache CXF提供了一种高效的方式来实现SOAP和RESTful两种类型的Web服务接口。通过合理的配置和编码,开发者可以在同一系统中轻松地集成这两种服务风格,满足不同应用场景的需求。在实际项目中,根据服务的特性...

    cxf集成Spring的restful WebService接口

    在IT行业中,CXF是一个广泛使用的开源框架,用于构建和开发Web服务。它不仅支持SOAP协议,还支持RESTful风格的API。而Spring框架则是一个全面的企业级应用开发框架,两者结合可以创建强大的、灵活的Java应用程序。本...

    CXF3.0+Spring3.2 RESTFul服务(下)

    使用CXF创建RESTFul服务,通常我们会定义一个Java类作为资源,这个类上的注解会告诉CXF如何映射HTTP请求。例如: ```java import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; import ...

    CXF RESTful spring maven CRUD

    **标题解析:** "CXF RESTful spring maven CRUD" 这个标题表明这是一个使用CXF框架、Spring和Maven构建的RESTful Web服务的示例项目,它实现了CRUD(创建、读取、更新、删除)操作。CXF是一个开源的服务框架,它...

    cxf 开发restful服务

    CXF作为Java框架,提供了强大的支持来实现RESTful服务。 接下来,我们进入CXF与Maven的集成过程。Maven是Java项目管理工具,它帮助开发者管理项目的构建、依赖和生命周期。在创建CXF RESTful服务时,我们首先需要在...

    图床 类似 七牛 restful + cxf + springmvc + webservice

    总的来说,构建一个类似七牛的图床服务,需要结合RESTful API的设计思想,利用CXF实现Web服务接口,借助Spring MVC处理HTTP请求,并妥善管理图片存储。这样的系统既能够满足高性能的需求,也能提供灵活的扩展性和...

    CXF视频:1、使用CXF实现简单的HelloWorld

    【标题】"CXF视频:1、使用CXF实现简单的HelloWorld",这是一段关于Apache CXF框架的初级教程,旨在引导初学者通过实际操作理解如何利用CXF创建一个基本的“HelloWorld”服务。Apache CXF是一个开源的Java框架,它...

    CXF3.0+Spring3.2 RESTFul服务

    本教程将重点介绍如何使用CXF 3.0.2版本与Spring 3.2.14版本结合,发布RESTFul服务,并提供源代码供下载,以帮助开发者更好地理解和实践这一技术。 首先,了解RESTFul服务的核心概念:资源、URI(统一资源标识符)...

    CXF实现WebService详解实例

    Apache CXF是一个强大的开源工具,它提供了多种方式来创建和使用Web服务,包括SOAP、RESTful API、XML以及JSON等。CXF支持WS-*规范,如WS-Security、WS-ReliableMessaging等,使开发者可以构建高度安全、可靠的服务...

    RestFul(一)WebService之CXF的RestFul风格开发

    本篇文章将探讨在Java领域中,如何使用Apache CXF框架实现RESTful风格的Web服务开发。** **1. RESTful风格的基本概念** RESTful风格的核心理念是将网络上的各种资源抽象为URI(统一资源标识符),并通过HTTP方法...

    cxf发布RestFul接口。 maven

    在IT行业中,CXF是一个广泛使用的开源框架,用于构建和开发Web服务,包括SOAP和RESTful接口。本篇文章将深入探讨如何使用CXF、Spring、Maven等技术栈来发布一个支持HTTP请求和SOAP调用的RestFul接口。 首先,我们...

Global site tag (gtag.js) - Google Analytics