Spring实现CXF服务端
来源:互联网 发布:ipad电视剧下载软件 编辑:程序博客网 时间:2024/05/16 10:10
上篇博客简单介绍了Restful Service的服务端编程,本篇博客详细的介绍了通过Spring集成发布服务的过程。
一、实现工具: Eclipse
二、实现过程及代码:
1、使用Maven创建web项目cxf-rs-spring
File -> New -> Others -> Maven -> Maven Project -> use default ... -> maven archetype webapp
2、配置pom.xml文件 添加依赖
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>me.cxf-sample</groupId> <artifactId>cxf-rs-spring</artifactId> <packaging>war</packaging> <version>0.0.1-SNAPSHOT</version> <name>cxf-rs-spring Maven Webapp</name> <url>http://maven.apache.org</url> <!-- 申明常用软件的版本 --><properties> <jettyVersion>9.3.7.v20160115</jettyVersion> <cxf.version>3.1.6</cxf.version></properties><dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>javax.ws.rs</groupId> <artifactId>javax.ws.rs-api</artifactId> <version>2.0.1</version> </dependency> <!-- CXF jaxrs 依赖 --> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-transports-http</artifactId> <version>${cxf.version}</version> </dependency> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-frontend-jaxrs</artifactId> <version>${cxf.version}</version> </dependency> <!-- CXF jaxrs description 依赖 --> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-rs-service-description</artifactId> <version>${cxf.version}</version> </dependency> <!-- spring 依赖 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>3.2.8.RELEASE</version> </dependency><!-- Json 依赖 --><dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-jaxrs</artifactId> <version>1.9.13</version></dependency><dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-xc</artifactId> <version>1.9.13</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-jdk14</artifactId><version>1.7.19</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>jcl-over-slf4j</artifactId><version>1.7.19</version></dependency></dependencies><build> <finalName>cxf-rs-spring</finalName> <!-- jetty:run 插件 --> <plugins> <plugin> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <version>${jettyVersion}</version> </plugin> </plugins></build></project>
3、找到文件/src/main/webapp/WEB-INF/web.xml 修改为
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" ><web-app> <display-name>cxf-rs-spring Maven Webapp</display-name> <!-- 设置Spring容器加载配置文件路径 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>WEB-INF/beans.xml</param-value> </context-param> <!-- 加载Spring容器配置 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <listener> <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class> </listener> <!-- 加载CXFServlet容器配置 --> <servlet> <servlet-name>CXFServlet</servlet-name> <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>CXFServlet</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping></web-app>
4、在相同目录下(/src/main/webapp/WEB-INF/),新建beans.xml文件
<?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" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd"> <!-- do not use import statements if CXFServlet init parameters link to this beans.xml --> <import resource="classpath:META-INF/cxf/cxf.xml" /> <import resource="classpath:META-INF/cxf/cxf-servlet.xml" /> <jaxrs:server id="customerService" address="/service1"> <jaxrs:serviceBeans> <ref bean="customerBean" /> </jaxrs:serviceBeans> <!-- 引入json 输入/输出支持 --> <jaxrs:providers> <bean class="org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider"/> <bean class="org.apache.cxf.jaxrs.provider.JAXBElementProvider"/> </jaxrs:providers> </jaxrs:server> <bean id="customerBean" class="demo.jaxrs.server.CustomerService" /></beans>
5、在/src.java/main/ 目录下 编写服务端代码
创建项目,这时发现没有 src/main/java 源代码目录。 按以下步骤操作:
项目名 -> Context Menu(鼠标右键) -> properties -> Java Build Path -> JRE System Lib -> Edit按钮 -> Workspace default JRE
根资源类(CustomerService):
/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */package demo.jaxrs.server;import java.util.HashMap;import java.util.Map;import javax.ws.rs.Consumes;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.Produces;import javax.ws.rs.core.Response;@Path("/customerservice/")//@Produces("text/xml")//@Produces("application/json")@Produces({ "text/plain","text/xml", "application/json", "application/xml", "application/x-www-form-urlencoded"})@Consumes({ "application/x-www-form-urlencoded", "text/plain","text/xml", "application/json" })public class CustomerService { long currentId = 123; Map<Long, Customer> customers = new HashMap<Long, Customer>(); Map<Long, Order> orders = new HashMap<Long, Order>(); public CustomerService() { init(); } @GET @Path("/customers/{id}/") public Customer getCustomer(@PathParam("id") String id) { System.out.println("----invoking getCustomer, Customer id is: " + id); long idNumber = Long.parseLong(id); Customer c = customers.get(idNumber); return c; } @PUT @Path("/customers/") public Response updateCustomer(Customer customer) { System.out.println("----invoking updateCustomer, Customer name is: " + customer.getName()); Customer c = customers.get(customer.getId()); Response r; if (c != null) { customers.put(customer.getId(), customer); r = Response.ok().build(); } else { r = Response.notModified().build(); } return r; } @POST @Path("/customers/") public Response addCustomer(Customer customer) { System.out.println("----invoking addCustomer, Customer name is: " + customer.getName()); customer.setId(++currentId); customers.put(customer.getId(), customer); return Response.ok(customer).build(); } @DELETE @Path("/customers/{id}/") public Response deleteCustomer(@PathParam("id") String id) { System.out.println("----invoking deleteCustomer, Customer id is: " + id); long idNumber = Long.parseLong(id); Customer c = customers.get(idNumber); Response r; if (c != null) { r = Response.ok().build(); customers.remove(idNumber); } else { r = Response.notModified().build(); } return r; } @Path("/orders/{orderId}/") public Order getOrder(@PathParam("orderId") String orderId) { System.out.println("----invoking getOrder, Order id is: " + orderId); long idNumber = Long.parseLong(orderId); Order c = orders.get(idNumber); return c; } final void init() { Customer c = new Customer(); c.setName("John"); c.setId(123); customers.put(c.getId(), c); Order o = new Order(); o.setDescription("order 223"); o.setId(223); orders.put(o.getId(), o); }}
子资源类:
Order类:
/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */package demo.jaxrs.server;import java.util.HashMap;import java.util.Map;import javax.ws.rs.GET;import javax.ws.rs.Path;import javax.ws.rs.PathParam;import javax.xml.bind.annotation.XmlRootElement;@XmlRootElement(name = "Order")public class Order { private long id; private String description; private Map<Long, Product> products = new HashMap<Long, Product>(); public Order() { init(); } public long getId() { return id; } public void setId(long id) { this.id = id; } public String getDescription() { return description; } public void setDescription(String d) { this.description = d; } @GET @Path("products/{productId}/") public Product getProduct(@PathParam("productId")int productId) { System.out.println("----invoking getProduct with id: " + productId); Product p = products.get(new Long(productId)); return p; } final void init() { Product p = new Product(); p.setId(323); p.setDescription("product 323"); products.put(p.getId(), p); }}
Produce类:
/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */package demo.jaxrs.server;import javax.xml.bind.annotation.XmlRootElement;@XmlRootElement(name = "Product")public class Product { private long id; private String description; public long getId() { return id; } public void setId(long id) { this.id = id; } public String getDescription() { return description; } public void setDescription(String d) { this.description = d; }}
最后文件目录结构为
6、运行项目
Maven运行参数为 package jetty:run
7、 运行结果:
GET 请求
POST请求
8、 如果要输出JSON格式的文本,需要在pom.xml 和beans.xml中添加依赖, 上述代码中已添加,可自行查看
运行结果如下:
0 0
- Spring实现CXF服务端
- cxf依赖spring 方式实现webservice服务端
- spring集成CXF服务端
- cxf实现webservice服务端
- CXF和Spring整合实现WebService服务端、客户端
- CXF与Spring集成服务端
- spring整合cxf 客户端+服务端
- spring整合cxf webService(服务端)
- CXF+Spring+Maven之服务端
- cxf+spring创建webservice服务端
- Apache cxf实现WebServices--服务端
- CXF 在Spring中开发服务端步骤
- CXF WebService服务端成功(集成spring)
- spring与CXF整合配置(服务端)
- cxf spring 简单的搭建服务端
- Spring整合Apache CXF(服务端+客户端)
- 基于Apache CXF和Java(spring+maven)的webservice服务端实现
- CXF+Spring 实现WebService
- 399. Evaluate Division
- Direct3D补充篇:表面缓冲区技术实现动画的流畅显示
- maven+springmvc+spring4+hibernate4整合
- 大型网站架构————核心原理-【可用性】4
- 全排列的非递归实现及递归实现
- Spring实现CXF服务端
- UVA11488 Trie
- 马拉车(Manacher)算法最通俗教学
- Android开发与调试一:adb在win7下安装与使用
- 南京 我真的很爱你
- Java 流Stream、文件File和I/O
- 逻辑回归学习笔记
- 使用HttpURLConnection访问网络
- 学习笔记3--Cannot set property 'onclick' of null的问题