`

CXF3.0.2+Spring3.2.14 WebService入门实例五(下)

 
阅读更多

继续修炼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.javapublicPerson 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入门实例四

    【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简单的webservice+Cxf+Spring数据对接实例以及jar.rar...

    cxf+spring实现webservice

    以上是CXF+Spring实现Web Service的基本流程和关键知识点。实际应用中,还需要根据具体的需求和环境进行适当的调整和扩展。例如,如果涉及到大型分布式系统,可能还需要考虑服务治理、负载均衡等问题。通过熟练掌握...

    CXF2+Spring2.5开发WebService实例

    在本文中,我们将深入探讨如何使用Apache CXF 2与Spring 2.5框架来开发Web服务实例。Apache CXF是一个流行的开源项目,它提供了一种简单且强大的方式来实现和消费SOAP和RESTful Web服务。Spring框架则以其模块化、...

    CXF3.0.9+SPRING开发webservice例子

    当我们谈论"CXF3.0.9+SPRING开发webservice例子"时,这意味着我们将探讨如何结合这两个强大的工具来创建和消费Web服务。 首先,让我们深入了解CXF。Apache CXF是基于Java的,它支持多种Web服务标准,如SOAP、...

    cxf+spring的webservice实例

    总的来说,"cxf+spring的webservice实例"是一个实践性的教程,旨在帮助开发者理解如何在Spring环境中利用CXF快速构建和部署Web服务。通过这个实例,你可以掌握从创建服务到发布、测试的整个流程,进一步提升你的Java...

    Apache CXF2+Spring2.5轻松实现WebService

    本教程将深入探讨如何利用Apache CXF 2与Spring 2.5来构建和使用WebService。 首先,让我们理解这两个组件的基本概念。Apache CXF是一个全面的服务框架,它支持多种Web服务规范,如SOAP、RESTful、WS-*等。它提供了...

    CXF2.1.3+spring3.0+struts2.3.4

    【标签】"CXF+spring WebService CXF"强调了这些组件的集成,特别是CXF作为Web服务的主要提供者,以及与Spring的紧密配合。CXF不仅可以用作服务提供者,还可以作为客户端来消费其他服务,这在Spring的管理下变得更加...

    CXF+Spring+自定义拦截器 WebService实例源码下载

    这里少了一个类,是根据实体类生成xml的文件下载地址为:http://download.csdn.net/detail/qq_14996421/9495688

    cxf+spring开发webservice实例(java)

    web项目使用spring和cxf的一个开发实例,有简单的代码样例和jar。是一个完整的项目,最终发布完成时访问 http://ip:port/项目名称/webservices/ 就会发现你发布的webservice服务。

    CXF3.0+Spring3.2 WSSecurity

    描述中提到的"利用CXF3.0.2+Spring3.2.14发布WSSecurity"意味着该压缩包可能包含了一个演示或者教程,展示了如何配置和使用这两个版本的软件来启用Web服务的安全特性。"需要源代码可以下载"则暗示这个压缩包里可能...

    CXF+Spring+Tomcat发布WebService

    【标题】"CXF+Spring+Tomcat发布WebService"涉及的是使用Apache CXF框架与Spring框架结合,在Tomcat服务器上部署和消费Web服务的过程。这是一个常见的企业级应用开发场景,特别是对于实现基于SOAP协议的Web服务。...

    Spring + cxf = webservice 完整实例源码免费下载

    Spring + cxf = webservice 完整实例源码免费下载 完全免费。此资源仅为文档提供。 版权为百度文档 "Spring + cxf = webservice 完整实例源码免费下载" 所有。

    cxf+spring开发webservice客户端与服务端实例

    本实例将详细阐述如何利用CXF和Spring来构建Web服务的客户端和服务端。 一、CXF简介 CXF是一个开源的Java框架,专门用于构建和消费Web服务。它支持SOAP、RESTful等多种服务模型,并且可以方便地与Spring框架集成,...

    cxf+spring发布webservice和restservice

    本项目“cxf+spring发布webservice和restservice”专注于利用Apache CXF框架与Spring框架结合,实现这两种服务的发布。Apache CXF是一个开源的、功能丰富的服务栈,它使得开发者能够轻松地构建和部署SOAP和RESTful ...

    使用Eclipse+Maven+Spring+CXF构建的WebService服务

    Web项目中基于Maven与Spring整合的WebService之cxf的实现⬇️ 详情请参考如下链接: https://locqi.github.io/locqi.com/2018/09/05/Eclipse+Maven+Spring+CXF-create-WebService/

    CXF2.7+Spring3 Java WebService 集成用例

    - **依赖注入(DI)**:Spring的DI允许CXF组件轻松地接收来自Spring容器的依赖,无需硬编码实例化。 - **配置简化**:通过Spring配置文件,可以集中管理Web服务的生命周期和配置。 - **测试友好**:Spring的单元...

    CXF3.0+Spring3.2 HelloWorld实例

    在本教程中,我们将深入探讨如何使用Apache CXF 3.0与Spring 3.2框架构建一个简单的"Hello World" Web服务实例。这个过程涵盖了关键的技术组件、配置步骤以及可能遇到的问题解决策略。 首先,Apache CXF是一个开源...

    cxf+spring=webservice CXF 应用开发

    标题 "cxf+spring=webservice CXF 应用开发" 暗示了我们将讨论如何结合Apache CXF和Spring框架来创建Web服务。Apache CXF是一个开源的Java框架,主要用于构建和部署SOAP和RESTful Web服务。Spring框架则是一个广泛...

    xfire+spring+webservice入门例子

    【xfire+Spring+WebService 入门实例详解】 在IT行业中,Web服务是一个重要的通信方式,它允许不同系统间的应用程序进行数据交换。本入门实例将深入探讨如何使用XFire框架与Spring集成来构建和消费Web服务。XFire是...

Global site tag (gtag.js) - Google Analytics