CXF采用HttpClient实现基本的RESTFul应用之服务端

来源:互联网 发布:淘宝店铺掌柜名怎么改 编辑:程序博客网 时间:2024/06/05 16:22

下载JavaEE:http://www.oracle.com/technetwork/java/javaee/downloads/java-ee-sdk-7-jdk-7u21-downloads-1956231.html?ssSourceSiteId=otncn

此版本几乎没有用到,使用Myeclipse提供的JavaEE。

开发工具:Myeclipse,系统:Windows,CXF版本:apache-cxf-2.7.3

1、新建web工程 cxf4rest,导入CXF需要的包:

2、新建SEI(服务端点接口)

ProjectManager.java

package com.enson.server.inface;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.core.Response;import com.enson.server.model.Project;@Path("/ProjectManager/")public interface ProjectManager {@GET@Path("/getProjectName/")public Response getProjectName();@GET@Path("/getProjectNameFromID/{projectID}/")public Response getProjectNameFromID(String projectID);@GET@Path("/greeting/")public Response greeting();@GET@Path("/greetingWithParameter/{greet}/")public Response greetingWithParameter(String greet);@GET@Path("/updateProjectName/{projectName}/")public Response updateProjectName(String projectName);@PUT@Path("/setDefaultProject/")public Response setDefaultProject(Project project);@POST@Path("/registerProject/")public Response registerProject(Project project);@DELETE@Path("/removeProject/{id}/")public Response removeProject(String id);@GET@Path("/getDefaultProject/")public Project getDefaultProject();@GET@Path("/getAllProject/")public Response getAllProject();}

模型类Project.java

package com.enson.server.model;public class Project {private String name ;private String id ;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getId() {return id;}public void setId(String id) {this.id = id;}}

SEI实现类:ProjectManagerImpl

package com.enson.server.inface.impl;import java.util.HashMap;import java.util.Map;import javax.ws.rs.Path;import javax.ws.rs.core.Response;import com.enson.server.inface.ProjectManager;import com.enson.server.model.Project;@Path("/ProjectManager/")public class ProjectManagerImpl implements ProjectManager {private Project project;private Map<String, Project> projectMap;public ProjectManagerImpl() {System.out.println("=======ProjectManagerImpl Construct=======");initProject();}private void initProject() {project = new Project();project.setId("one");project.setName("张三");Project project2 = new Project();project2.setId("two");project2.setName("李四");projectMap = new HashMap<String, Project>();projectMap.put(project.getId(), project);projectMap.put(project2.getId(), project2);}@Overridepublic Response getProjectName() {System.out.println("getProjectName() invoking...");Response response;if (project.getName() == null) {response = Response.notModified().build();} else {response = Response.ok(project.getName()).build();}return response;}@Overridepublic Response getProjectNameFromID(String projectID) {System.out.println("getProjectNameFromID(String projectID) invoking...");Response response;if (projectID == null) {return Response.notModified().build();} else if (!projectMap.containsKey(projectID)) {response = Response.notModified().build();} else {response = Response.ok(projectMap.get(projectID).getName()).build();}return response;}@Overridepublic Response greeting() {return Response.ok("greeting()...").build();}@Overridepublic Response greetingWithParameter(String greet) {return Response.ok("greetingWithParameter(" + greet + ")...").build();}@Overridepublic Response updateProjectName(String projectName) {System.out.println("updateProjectName(String projectName) invoking...");project.setName(projectName);return Response.ok(project.getName()).build();}@Overridepublic Response setDefaultProject(Project project) {System.out.println("setDefaultProject(Project project) invoking...");if (project == null) {return Response.notModified().build();}this.project = project;return Response.ok(project.getName()).build();}@Overridepublic Response registerProject(Project project) {System.out.println("registerProject(Project project) invoking...");if (project == null) {return Response.notModified().build();}else if(projectMap.containsKey(project.getId())){return Response.notModified().build();}else{projectMap.put(project.getId(), project);}return Response.ok(project.getName()).build();}@Overridepublic Response removeProject(String id) {System.out.println("removeProject(String id) invoking...");if(!projectMap.containsKey(id)){return Response.notModified().build();}else{projectMap.remove(id);}return Response.ok("Remove OK!!").build();}@Overridepublic Project getDefaultProject() {return this.project;}@Overridepublic Response getAllProject() {return Response.ok(projectMap.values().toString()).build();}}

3、编写服务端发布程序

package com.enson.server;import org.apache.cxf.jaxrs.JAXRSServerFactoryBean;import org.apache.cxf.jaxrs.lifecycle.SingletonResourceProvider;import com.enson.server.inface.ProjectManager;import com.enson.server.inface.impl.ProjectManagerImpl;public class Server {public void start() {System.err.println("Starting server...");String address = "http://localhost:9000/";ProjectManager projectManager = new ProjectManagerImpl();JAXRSServerFactoryBean sf = new JAXRSServerFactoryBean();//使用cxf进行发布服务sf.setResourceClasses(ProjectManager.class);sf.setResourceProvider(ProjectManager.class,new SingletonResourceProvider(projectManager));sf.setAddress(address);sf.create();}public static void main(String[] args) {new Server().start();System.out.println("Server ready....");}}

运行服务端发布程序即可发布服务。