代表性传输(Representational State Transfer,REST)在Web领域已经得到了广泛的应用。REST不是一种协议,而是一种体系风格。
REST的具体实现应该遵循四个基本原则:
- 显示的使用Http 方法
- 无状态
- 公开目录结构式的URI
- 传输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;
}
}
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);
}
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>
<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
相关推荐
在本案例中,我们将深入探讨如何在不依赖Spring框架的情况下,仅使用CXF实现一个简单的RESTful服务,该服务能返回JSON格式的数据。 1. **CXF与RESTful服务**: RESTful是一种架构风格,强调资源的识别和通过HTTP...
【描述】中的链接指向了一个ITEYE博客,虽然具体内容无法在当前环境中查看,但通常这样的博客会详细介绍如何使用CXF创建RESTful服务的步骤,可能包括以下方面: 1. **环境准备**:首先,需要在项目中引入CXF的依赖...
CXF框架支持RESTful服务的实现,让我们来详细探讨如何使用CXF构建一个简单的RESTful服务。\n\n一、CXF简介\nApache CXF是一个强大的Java框架,提供了一种灵活的方式来构建和部署Web服务。它支持多种Web服务规范,...
描述:本实验使用SpringBoot、Mybatis和CXF框架来实现Restful API和WebService API接口的大实验,涵盖了数据库设计、 Maven依赖管理、Restful API和WebService API的实现等方面。 标签:spring boot、mybatis、...
总之,这份"使用Spring整合CXF发布RESTFul项目案例"资料将帮助你深入理解RESTful服务的实现,以及如何利用Spring和CXF这一强大组合来构建高效、灵活的REST服务。通过实践案例,你可以亲手尝试并掌握相关技能。
在IT行业中,CXF是一个广泛使用的开源框架,用于构建和开发Web服务。它支持多种Web服务规范,包括SOAP和RESTful。本项目聚焦于利用CXF与Spring框架集成,实现RESTful风格的Web服务。REST(Representational State ...
在IT行业中,Spring CXF是一个广泛使用的开源框架,它整合了Spring框架的功能和Apache CXF的服务堆栈,为开发人员提供了构建和实现Web服务的强大工具。在这个“Spring CXF Restful实例”中,我们将深入探讨如何利用...
本篇将详细介绍如何使用Jersey框架实现RESTful服务,以及如何通过CXF客户端进行调用,并探讨jQuery AJAX如何与这些服务进行交互。 1. **Jersey与RESTful服务** Jersey是Java平台上的一个开源项目,它是JAX-RS...
总之,Apache CXF提供了一种高效的方式来实现SOAP和RESTful两种类型的Web服务接口。通过合理的配置和编码,开发者可以在同一系统中轻松地集成这两种服务风格,满足不同应用场景的需求。在实际项目中,根据服务的特性...
在IT行业中,CXF是一个广泛使用的开源框架,用于构建和开发Web服务。它不仅支持SOAP协议,还支持RESTful风格的API。而Spring框架则是一个全面的企业级应用开发框架,两者结合可以创建强大的、灵活的Java应用程序。本...
使用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框架、Spring和Maven构建的RESTful Web服务的示例项目,它实现了CRUD(创建、读取、更新、删除)操作。CXF是一个开源的服务框架,它...
CXF作为Java框架,提供了强大的支持来实现RESTful服务。 接下来,我们进入CXF与Maven的集成过程。Maven是Java项目管理工具,它帮助开发者管理项目的构建、依赖和生命周期。在创建CXF RESTful服务时,我们首先需要在...
总的来说,构建一个类似七牛的图床服务,需要结合RESTful API的设计思想,利用CXF实现Web服务接口,借助Spring MVC处理HTTP请求,并妥善管理图片存储。这样的系统既能够满足高性能的需求,也能提供灵活的扩展性和...
【标题】"CXF视频:1、使用CXF实现简单的HelloWorld",这是一段关于Apache CXF框架的初级教程,旨在引导初学者通过实际操作理解如何利用CXF创建一个基本的“HelloWorld”服务。Apache CXF是一个开源的Java框架,它...
本教程将重点介绍如何使用CXF 3.0.2版本与Spring 3.2.14版本结合,发布RESTFul服务,并提供源代码供下载,以帮助开发者更好地理解和实践这一技术。 首先,了解RESTFul服务的核心概念:资源、URI(统一资源标识符)...
Apache CXF是一个强大的开源工具,它提供了多种方式来创建和使用Web服务,包括SOAP、RESTful API、XML以及JSON等。CXF支持WS-*规范,如WS-Security、WS-ReliableMessaging等,使开发者可以构建高度安全、可靠的服务...
本篇文章将探讨在Java领域中,如何使用Apache CXF框架实现RESTful风格的Web服务开发。** **1. RESTful风格的基本概念** RESTful风格的核心理念是将网络上的各种资源抽象为URI(统一资源标识符),并通过HTTP方法...
在IT行业中,CXF是一个广泛使用的开源框架,用于构建和开发Web服务,包括SOAP和RESTful接口。本篇文章将深入探讨如何使用CXF、Spring、Maven等技术栈来发布一个支持HTTP请求和SOAP调用的RestFul接口。 首先,我们...