继续修炼CXF实战之RESTFul服务(下),感觉上半部分只传递了一个xml格式的数据,下半部分在传一个json格式的数据。感觉学习新东西时,有时候会一步成功,大部分是步步不成功,呵呵,人长的太帅容易遭天妒啊!说一点自己的经验,在网上找资料时,尽量找时间比较近的,而且能有配套的的实例最好了,无论有没有实例,一定要自己动手敲一敲代码,自已动手配置一下环境,因为在实际开发或者布署过程中,可能因为操作系统、浏览器不同等等,出现不一样的结果!我写的这几个实例,尽量一次一个实例,互不关联,方便大家查阅下载!
介绍一下开发工具和开发环境,jdk1.6.0_43+Tomcat6.0.29+MyEclipse10.5,没有使用Maven进行管理!
一、新建web工程,选择Java EE5.0
二、新建实体类Person.java
package com.pojo;
importjava.io.Serializable;
importjavax.xml.bind.annotation.XmlRootElement;
importjavax.xml.bind.annotation.XmlElement;
/**
*
* 类名:Person.java
* 作者: 张述飞
* 创建时间: 2016-1-28下午1:49:34
* 版本: V1.0
* 功能描述:
*/
@SuppressWarnings("serial")
@XmlRootElement(name= "person")
public classPerson implements Serializable{
private String id;
private String name;
private String desc;
@XmlElement(name = "id")
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@XmlElement(name = "name")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@XmlElement(name = "desc")
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
}
三、新建接口类PersonService.java
package com.interfaces;
import java.io.Serializable;
import java.util.List;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import com.pojo.Person;
/**
*
* 类名: PersonService.java
* 作者: 张述飞
* 创建时间: 2016-1-28下午1:45:00
* 版本: V1.0
* 功能描述:
*/
//@Produces({MediaType.APPLICATION_JSON})
@Produces({MediaType.APPLICATION_XML})
publicinterface PersonService extends Serializable {
@GET
@Path("/persons")
public List<Person> getPersons();
@GET
@Path("/persons/{id}")
public Person getPerson(@PathParam("id") String id);
}
四、新建接口实现类PersonServiceImpl.java
package com.interfaces;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.pojo.Person;
/**
*
* 类名: PersonServiceImpl.java
* 作者: 张述飞
* 创建时间: 2016-1-28下午1:46:42
* 版本: V1.0
* 功能描述:
*/
publicclass PersonServiceImpl implements PersonService {
privatestatic finallong serialVersionUID = 1L;
privatestatic Map<String, Person> ps =new HashMap<String, Person>();
static {
Person p1 = new Person();
p1.setId("001");
p1.setName("张三");
p1.setDesc("这是张三");
Person p2 = new Person();
p2.setId("002");
p2.setName("李四");
p2.setDesc("这是李四");
ps.put(p1.getId(), p1);
ps.put(p2.getId(), p2);
}
public List<Person> getPersons() {
returnnew ArrayList<Person>(ps.values());
}
public Person getPerson(String id) {
returnps.get(id);
}
}
五、新建测试类Client.java
package com.test;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.util.List;
import java.util.Map;
/**
* 测试类
* 类名: Client.java
* 作者: 张述飞
* 创建时间: 2016-1-28下午1:52:25
* 版本: V1.0
* 功能描述:
*/
publicclass Client {
publicstatic void main(String[] args)throws Exception {
URLConnection conn = new URL("http://localhost:8080/WbRest1/v1/persons/001").openConnection(); /**
*这里做一个说明
*http://localhost:8080/WbRest1/v1/persons/001
* WbRest1-工程名
* v1-版本
*在applicationContext.xml中定义的<jaxrs:server id="restService" address="/v1">
* PersonService.java中publicPerson getPerson方法中的@Path("/persons/{id}")路径
*/
HttpURLConnection htconn = (HttpURLConnection)conn;
htconn.setRequestMethod("GET");
//建立实际的连接
htconn.connect();
// 获取所有响应头字段
Map<String, List<String>>map = htconn.getHeaderFields();
// 遍历所有的响应头字段
for (String key : map.keySet()) {
System.out.println(key +"--->" + map.get(key));
}
int code = htconn.getResponseCode();
System.out.println(code);
InputStream is = htconn.getInputStream();
int len = 0;
byte[] b =new byte[1024];
StringBuffer sb = new StringBuffer();
while ((len = is.read(b)) != -1) {
String s = new String(b,0,len,"UTF-8");
sb.append(s);
}
System.out.println(sb.toString());
htconn.disconnect();
}
}
六、这里写几个异常
Exception in thread"main"java.io.IOException: Server returned HTTP response code: 500 for URL:http://localhost:8080/WbRest1/v1/persons/001/
atsun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
………………………………………………………………………………………………………
atcom.test.Client.main(Client.java:16)
500
这个异常需要导入jackson-jaxrs-json-provider-2.2.3.jar
=============================================================
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'restService': Cannotcreate inner bean'com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider#14753da' of type[com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider] while setting beanproperty 'providers' with key [0]; nested exception isorg.springframework.beans.factory.CannotLoadBeanClassException: Error loading class[com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider] for bean with name'com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider#14753da' defined in classpath resource [applicationContext.xml]: problem with class file or dependentclass; nested exception is java.lang.NoClassDefFoundError:com/fasterxml/jackson/jaxrs/base/ProviderBase
这个异常需要导入jackson-jaxrs-base-2.2.3.jar
=============================================================
警告: Exception encountered during context initialization -cancelling refresh attempt
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'restService': Cannotcreate inner bean 'com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider#b6df89'of type [com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider] while settingbean property 'providers' with key [0]; nested exception isorg.springframework.beans.factory.CannotLoadBeanClassException: Error loading class [com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider]for bean with name'com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider#b6df89' defined in classpath resource [applicationContext.xml]: problem with class file or dependentclass; nested exception is java.lang.NoClassDefFoundError:com/fasterxml/jackson/core/Versioned
这个异常需要导入jackson.core.jar, 这几个异常都差不多,就是提示你需要加载jackson的几个jar包
七、使用Spring, applicationContext.xml
<?xmlversion="1.0"encoding="UTF-8"?>
<beansxmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:http-conf="http://cxf.apache.org/transports/http/configuration"
xmlns:jaxrs="http://cxf.apache.org/jaxrs"
xsi:schemaLocation="
http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-3.2.xsd
http://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-3.2.xsd
http://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-3.2.xsd
http://cxf.apache.org/transports/http/configurationhttp://cxf.apache.org/schemas/configuration/http-conf.xsd
http://cxf.apache.org/jaxrshttp://cxf.apache.org/schemas/jaxrs.xsd">
<importresource="classpath:META-INF/cxf/cxf.xml"/>
<importresource="classpath:META-INF/cxf/cxf-servlet.xml"/>
<beanid="personService"class="com.interfaces.PersonServiceImpl"></bean>
<jaxrs:serverid="restService"address="/v1">
<jaxrs:serviceBeans>
<ref bean="personService"/>
</jaxrs:serviceBeans>
<jaxrs:inInterceptors>
<bean class="org.apache.cxf.interceptor.LoggingInInterceptor"></bean>
</jaxrs:inInterceptors>
<jaxrs:outInterceptors>
<bean class="org.apache.cxf.interceptor.LoggingOutInterceptor"></bean>
</jaxrs:outInterceptors>
<!--访问json格式的数据,必写!-->
<jaxrs:providers>
<bean class="com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider"/>
</jaxrs:providers>
</jaxrs:server>
</beans>
八、web.xml
<?xmlversion="1.0"encoding="UTF-8"?>
<web-appversion="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name></display-name>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:applicationContext.xml
</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!--Spring刷新Introspector防止内在泄露-->
<listener>
<listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
</listener>
<servlet>
<servlet-name>CXFService</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CXFService</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
九、需导入的jar包
aopalliance-1.0.jar
asm-3.3.1.jar
commons-logging-1.1.3.jar
cxf-core-3.0.7.jar
cxf-manifest.jar
cxf-rt-bindings-soap-3.0.7.jar
cxf-rt-databinding-jaxb-3.0.7.jar
cxf-rt-frontend-jaxrs-3.0.7.jar
cxf-rt-frontend-jaxws-3.0.7.jar
cxf-rt-frontend-simple-3.0.7.jar
cxf-rt-transports-http-3.0.7.jar
cxf-rt-transports-http-jetty-3.0.7.jar
cxf-rt-ws-addr-3.0.7.jar
cxf-rt-ws-policy-3.0.7.jar
cxf-rt-wsdl-3.0.7.jar
geronimo-javamail_1.4_spec-1.7.1.jar
geronimo-jaxws_2.2_spec-1.2.jar
jackson-annotations-2.2.3.jar
jackson-databind-2.2.3.jar
jackson-jaxrs-base-2.2.3.jar
jackson-jaxrs-json-provider-2.2.3.jar
jackson.core.jar
javax.ws.rs-api-2.0.1.jar
jaxb-api-2.2.11.jar
jaxb-core-2.2.11.jar
jaxb-impl-2.2.11.jar
jetty-continuation-8.1.15.v20140411.jar
jetty-http-8.1.15.v20140411.jar
jetty-io-8.1.15.v20140411.jar
jetty-security-8.1.15.v20140411.jar
jetty-server-8.1.15.v20140411.jar
jetty-util-8.1.15.v20140411.jar
neethi-3.0.3.jar
servlet-api.jar
slf4j-api-1.7.9.jar
slf4j-jdk14-1.7.9.jar
spring-aop-3.2.14.RELEASE.jar
spring-beans-3.2.14.RELEASE.jar
spring-context-3.2.14.RELEASE.jar
spring-core-3.2.14.RELEASE.jar
spring-expression-3.2.14.RELEASE.jar
spring-web-3.2.14.RELEASE.jar
stax2-api-3.1.4.jar
woodstox-core-asl-4.4.1.jar
wsdl4j-1.6.3.jar
xmlschema-core-2.2.1.jar
十、测试
启动Tomcat服务器,再运行Client.java,
服务器端会显示
2016-1-29 16:34:16org.apache.cxf.interceptor.LoggingInInterceptor
信息: Inbound Message
----------------------------
ID: 1
Address:http://localhost:8080/WbRest1/v1/persons/001
Http-Method: GET
Content-Type:
Headers: {Accept=[text/html,image/gif, image/jpeg, *; q=.2, */*; q=.2], connection=[keep-alive],Content-Type=[null], host=[localhost:8080], user-agent=[Java/1.6.0_43]}
--------------------------------------
2016-1-29 16:34:17 org.apache.cxf.interceptor.LoggingOutInterceptor
信息: Outbound Message
---------------------------
ID: 1
Response-Code: 200
Content-Type: application/xml
Headers:{Content-Type=[application/xml], Date=[Fri, 29 Jan 2016 08:34:16 GMT]}
Payload: <?xmlversion="1.0" encoding="UTF-8"standalone="yes"?><person><desc>这是张三</desc><id>001</id><name>张三</name></person>
--------------------------------------
在客户端会显示:
null--->[HTTP/1.1 200 OK]
Date--->[Fri, 29 Jan 201608:34:17 GMT]
Transfer-Encoding--->[chunked]
Content-Type--->[application/xml]
Server--->[Apache-Coyote/1.1]
200
<?xmlversion="1.0" encoding="UTF-8"standalone="yes"?><person><desc>这是张三</desc><id>001</id><name>张三</name></person>
在IE浏览器中输入http://localhost:8080/WbRest1/v1/persons/001
会显示
<?xml version="1.0" encoding="UTF-8"standalone="yes" ?>
- <person>
<desc>这是张三</desc>
<id>001</id>
<name>张三</name>
</person>
十一、 将PersonService.java中的注解改为
@Produces({MediaType.APPLICATION_JSON})
启动Tomcat服务器,再运行Client.java,
服务器端会显示
ID: 3
Response-Code: 200
Content-Type: application/json
Headers:{Content-Type=[application/json], Date=[Fri, 29 Jan 2016 08:56:44 GMT]}
Payload:{"id":"001","name":"张三","desc":"这是张三"}
在客户端会显示:
null--->[HTTP/1.1 200 OK]
Date--->[Fri, 29 Jan 201608:56:32 GMT]
Transfer-Encoding--->[chunked]
Content-Type--->[application/json]
Server--->[Apache-Coyote/1.1]
200
{"id":"001","name":"张三","desc":"这是张三"}
【程序员被提bug之后的反应】1.怎么可能;2.在我这是好的,不信你来看看;3.真是奇怪,刚刚还好好的;4.肯定是数据问题;5.你清下缓存试试;6.重启下电脑试试;7.你装的什么版本的类库(jdk)8.这谁写的代码;9.尼玛怎么还在用360安全浏览器或者IEX版本的;10.用户不会像你这么操作的。
代码下载地址:
http://download.csdn.net/detail/zhangshufei8001/9422845
相关推荐
【CXF3.0.2+Spring3.2.14 WebService入门实例四】的知识点解析 在本文中,我们将深入探讨如何使用Apache CXF 3.0.2版本和Spring 3.2.14框架来创建一个基于WebService的文件传输应用。Apache CXF是一个流行的开源...
简单的webservice+Cxf+Spring数据对接实例以及jar.rar简单的webservice+Cxf+Spring数据对接实例以及jar.rar简单的webservice+Cxf+Spring数据对接实例以及jar.rar简单的webservice+Cxf+Spring数据对接实例以及jar.rar...
以上是CXF+Spring实现Web Service的基本流程和关键知识点。实际应用中,还需要根据具体的需求和环境进行适当的调整和扩展。例如,如果涉及到大型分布式系统,可能还需要考虑服务治理、负载均衡等问题。通过熟练掌握...
在本文中,我们将深入探讨如何使用Apache CXF 2与Spring 2.5框架来开发Web服务实例。Apache CXF是一个流行的开源项目,它提供了一种简单且强大的方式来实现和消费SOAP和RESTful Web服务。Spring框架则以其模块化、...
当我们谈论"CXF3.0.9+SPRING开发webservice例子"时,这意味着我们将探讨如何结合这两个强大的工具来创建和消费Web服务。 首先,让我们深入了解CXF。Apache CXF是基于Java的,它支持多种Web服务标准,如SOAP、...
总的来说,"cxf+spring的webservice实例"是一个实践性的教程,旨在帮助开发者理解如何在Spring环境中利用CXF快速构建和部署Web服务。通过这个实例,你可以掌握从创建服务到发布、测试的整个流程,进一步提升你的Java...
本教程将深入探讨如何利用Apache CXF 2与Spring 2.5来构建和使用WebService。 首先,让我们理解这两个组件的基本概念。Apache CXF是一个全面的服务框架,它支持多种Web服务规范,如SOAP、RESTful、WS-*等。它提供了...
【标签】"CXF+spring WebService CXF"强调了这些组件的集成,特别是CXF作为Web服务的主要提供者,以及与Spring的紧密配合。CXF不仅可以用作服务提供者,还可以作为客户端来消费其他服务,这在Spring的管理下变得更加...
这里少了一个类,是根据实体类生成xml的文件下载地址为:http://download.csdn.net/detail/qq_14996421/9495688
web项目使用spring和cxf的一个开发实例,有简单的代码样例和jar。是一个完整的项目,最终发布完成时访问 http://ip:port/项目名称/webservices/ 就会发现你发布的webservice服务。
描述中提到的"利用CXF3.0.2+Spring3.2.14发布WSSecurity"意味着该压缩包可能包含了一个演示或者教程,展示了如何配置和使用这两个版本的软件来启用Web服务的安全特性。"需要源代码可以下载"则暗示这个压缩包里可能...
【标题】"CXF+Spring+Tomcat发布WebService"涉及的是使用Apache CXF框架与Spring框架结合,在Tomcat服务器上部署和消费Web服务的过程。这是一个常见的企业级应用开发场景,特别是对于实现基于SOAP协议的Web服务。...
Spring + cxf = webservice 完整实例源码免费下载 完全免费。此资源仅为文档提供。 版权为百度文档 "Spring + cxf = webservice 完整实例源码免费下载" 所有。
本实例将详细阐述如何利用CXF和Spring来构建Web服务的客户端和服务端。 一、CXF简介 CXF是一个开源的Java框架,专门用于构建和消费Web服务。它支持SOAP、RESTful等多种服务模型,并且可以方便地与Spring框架集成,...
本项目“cxf+spring发布webservice和restservice”专注于利用Apache CXF框架与Spring框架结合,实现这两种服务的发布。Apache CXF是一个开源的、功能丰富的服务栈,它使得开发者能够轻松地构建和部署SOAP和RESTful ...
Web项目中基于Maven与Spring整合的WebService之cxf的实现⬇️ 详情请参考如下链接: https://locqi.github.io/locqi.com/2018/09/05/Eclipse+Maven+Spring+CXF-create-WebService/
- **依赖注入(DI)**:Spring的DI允许CXF组件轻松地接收来自Spring容器的依赖,无需硬编码实例化。 - **配置简化**:通过Spring配置文件,可以集中管理Web服务的生命周期和配置。 - **测试友好**:Spring的单元...
在本教程中,我们将深入探讨如何使用Apache CXF 3.0与Spring 3.2框架构建一个简单的"Hello World" Web服务实例。这个过程涵盖了关键的技术组件、配置步骤以及可能遇到的问题解决策略。 首先,Apache CXF是一个开源...
标题 "cxf+spring=webservice CXF 应用开发" 暗示了我们将讨论如何结合Apache CXF和Spring框架来创建Web服务。Apache CXF是一个开源的Java框架,主要用于构建和部署SOAP和RESTful Web服务。Spring框架则是一个广泛...
【xfire+Spring+WebService 入门实例详解】 在IT行业中,Web服务是一个重要的通信方式,它允许不同系统间的应用程序进行数据交换。本入门实例将深入探讨如何使用XFire框架与Spring集成来构建和消费Web服务。XFire是...