`
bugie
  • 浏览: 5982 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

调用webservice中含返回值为自定义对象的方法时,报ClassCastException错误

阅读更多

本人初学webservice,平台用spring+cxf+ibatis,在调用接口中含返回自定义对象的方法时,就会报ClassCastException,即方法:

public List<User> getUserList()

调用返回值为基本类型的方法,则没问题,如:

public Integer getUserCount();

困扰很久,包括调用含自定义类型的方法,也会报同样错误,如:

public void bImportData(List<User> uList);

请教各位大牛,盼回复,谢啦~\(≧▽≦)/~

 

1、服务端Webservice接口

@WebService
public interface ICxfDemo {
       /**
	 * 获取用户数量
	 * @return
	 */
	@WebMethod(operationName = "getUserCount", action = "urn:GetUserCount")
	public Integer getUserCount();


	/**
	 * 获取用户列表
	 * @return
	 */
	@WebMethod(operationName = "getUserList", action = "urn:GetUserList")
	public List<User> getUserList();
}

 

2、服务端webservice接口实现类:

@WebService(endpointInterface = "com.ocrlp.serv.ws.ICxfDemo",serviceName = "CxfDemoImpl") 
public class CxfDemoImpl implements ICxfDemo {
	
        private ServiceManager servMgr;
	@Resource(name="servMgr") 
	public void setServMgr(ServiceManager servMgr) {
		this.servMgr = servMgr;
	}
	
       /**
	 * 获取用户数量
	 * @return
	 */
	@Override
	public Integer getUserCount() {
		return servMgr.getUserRowCount();
	}

	/**
	 * 获取用户列表
	 * @return
	 */
	@Override
	public List<User> getUserList() {
		return servMgr.listAll_Users();
	}
}

 

3、beans.xml

    <jaxws:endpoint id="cxfDemo" 
        implementor="com.ocrlp.serv.ws.CxfDemoImpl" address="/cxfDemo" />

 
4、客户端java调用测试代码:

public class ICxfDemoTest {
	
	private ICxfDemoTest() {}
	private static ICxfDemo dsServ;
	
	/**
	 * 初始化构造方法
	 * @return
	 */
	synchronized public static ICxfDemo init() {
		if (dsServ == null) {
			JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
			factory.setServiceClass(ICxfDemo.class); // 注册WebService接口
			factory.setAddress("http://127.0.0.1/web/webservice/cxfDemo"); // 设置WebService地址
			dsServ = (ICxfDemo)factory.create(); 
		}
		return dsServ;
	}

	public Integer getUserCount() {
		return dsServ.getUserCount();
	}
	
	public static void main(String[] args) {
		System.out.println("客户端调用结果:" + ICxfDemoTest.init().getUserCount());
	}
}

 

5、实体类是可序列化的

public class User implements Serializable {
	
	private static final long serialVersionUID = 2519452507329194492L;
	private String uid;
	private String username;
	private String password;
	private String realname;
	private String org;
	private String job;

	//getter , setter 省略

}

 

6、运行eclipse服务器测试报错:

2014-11-1 22:20:32 org.apache.cxf.service.factory.ReflectionServiceFactoryBean buildServiceFromClass
信息: Creating Service {http://ws.terminal.ocrlinepatrol.com/}ICxfDemoService from class com.ocrlinepatrol.terminal.ws.ICxfDemo
Exception in thread "main" java.lang.ClassCastException: com.sun.xml.bind.v2.model.impl.RuntimeBuiltinLeafInfoImpl$5 cannot be cast to com.sun.xml.bind.v2.model.impl.ClassInfoImpl
    at com.sun.xml.bind.v2.model.impl.ClassInfoImpl.getBaseClass(ClassInfoImpl.java:171)
    at com.sun.xml.bind.v2.model.impl.RuntimeClassInfoImpl.getBaseClass(RuntimeClassInfoImpl.java:61)
    at com.sun.xml.bind.v2.model.impl.RuntimeClassInfoImpl.getBaseClass(RuntimeClassInfoImpl.java:41)
    at com.sun.xml.bind.v2.model.impl.ModelBuilder.getClassInfo(ModelBuilder.java:149)
    at com.sun.xml.bind.v2.model.impl.RuntimeModelBuilder.getClassInfo(RuntimeModelBuilder.java:55)
    at com.sun.xml.bind.v2.model.impl.RuntimeModelBuilder.getClassInfo(RuntimeModelBuilder.java:41)
    at com.sun.xml.bind.v2.model.impl.ModelBuilder.getTypeInfo(ModelBuilder.java:196)
    at com.sun.xml.bind.v2.model.impl.TypeRefImpl.calcRef(TypeRefImpl.java:56)
    at com.sun.xml.bind.v2.model.impl.TypeRefImpl.getTarget(TypeRefImpl.java:33)
    at com.sun.xml.bind.v2.model.impl.RuntimeTypeRefImpl.getTarget(RuntimeTypeRefImpl.java:22)
    at com.sun.xml.bind.v2.model.impl.RuntimeTypeRefImpl.getTarget(RuntimeTypeRefImpl.java:15)
    at com.sun.xml.bind.v2.model.impl.ElementPropertyInfoImpl$1.get(ElementPropertyInfoImpl.java:38)
    at com.sun.xml.bind.v2.model.impl.ElementPropertyInfoImpl$1.get(ElementPropertyInfoImpl.java:41)
    at java.util.AbstractList$Itr.next(AbstractList.java:345)
    at com.sun.xml.bind.v2.model.impl.ModelBuilder.getClassInfo(ModelBuilder.java:146)
    at com.sun.xml.bind.v2.model.impl.RuntimeModelBuilder.getClassInfo(RuntimeModelBuilder.java:55)
    at com.sun.xml.bind.v2.model.impl.RuntimeModelBuilder.getClassInfo(RuntimeModelBuilder.java:41)
    at com.sun.xml.bind.v2.model.impl.ModelBuilder.getTypeInfo(ModelBuilder.java:196)
    at com.sun.xml.bind.v2.model.impl.ModelBuilder.getTypeInfo(ModelBuilder.java:211)
    at com.sun.xml.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(JAXBContextImpl.java:383)
    at com.sun.xml.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:236)
    at com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:76)
    at com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:55)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:202)
    at javax.xml.bind.ContextFinder.find(ContextFinder.java:363)
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:574)
    at org.apache.cxf.jaxb.JAXBDataBinding.createJAXBContext(JAXBDataBinding.java:427)
    at org.apache.cxf.jaxb.JAXBDataBinding.initialize(JAXBDataBinding.java:221)
    at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.buildServiceFromClass(ReflectionServiceFactoryBean.java:313)
    at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.initializeServiceModel(ReflectionServiceFactoryBean.java:362)
    at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.create(ReflectionServiceFactoryBean.java:156)
    at org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.create(JaxWsServiceFactoryBean.java:89)
    at org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.createEndpoint(AbstractWSDLBasedEndpointFactory.java:74)
    at org.apache.cxf.frontend.ClientFactoryBean.create(ClientFactoryBean.java:51)
    at org.apache.cxf.frontend.ClientProxyFactoryBean.create(ClientProxyFactoryBean.java:92)
    at com.ocrlinepatrol.terminal.ws.ICxfDemoTest.init(ICxfDemoTest.java:34)
    at com.ocrlinepatrol.terminal.ws.ICxfDemoTest.main(ICxfDemoTest.java:64)

 

分享到:
评论

相关推荐

    C++2005调用C#Webservice接口返回值为List

    C++2005调用C#Webservice接口返回值为List 本文将详细介绍C++2005如何调用C#Webservice接口返回值为List。首先,需要了解C#Webservice的基本概念和C++2005如何调用Webservice接口。 一、C#Webservice的基本概念 ...

    VB如何调用WebService

    在探讨“VB如何调用WebService”的主题时,我们首先需要理解几个关键概念:Visual Basic(简称VB),WebService,以及SOAP协议。Visual Basic是一种由微软开发的面向对象的编程语言,广泛应用于Windows平台上的应用...

    ksoap2调用webService服务 包含自定义参数 自定义参数集合等

    - 处理返回的数据,通常是XML格式,需要解析为Java对象。 3. 调用Web Service服务步骤 - 创建SoapObject表示请求的SOAP消息。 - 设置命名空间和方法名。 - 添加参数到SoapObject。 - 创建...

    Delphi调用WebService的实例(非常经典)[参考].pdf

    TReomtable 是 WebService 中自定义类的基类,都继承自该类。TSOAPAttachment 是一种流类型,可以返回流数据。 Delphi 调用 WebService 需要使用到 Dispatch 和 Invoke 两个概念。Dispatch 是指将 SOAP 消息派遣到...

    vc6.0调用webservice的方法

    ### vc6.0调用WebService的方法详解 在深入探讨如何使用Visual C++ 6.0(简称VC6.0)来调用WebService之前,我们首先需要了解几个基本概念:SOAP、WebService以及它们与VC6.0的关系。 #### SOAP(Simple Object ...

    在WinForm程序中调用WebService

    在WinForm应用程序中调用WebService是一项常见的任务,它允许客户端应用程序与远程服务器上的服务进行交互,从而实现数据交换和功能扩展。以下是如何在WinForm中实现这一操作的详细步骤及涉及的相关知识点: 1. **...

    C#_.NET_动态调用webservice的三种方式

    我们可以使用System.Reflection命名空间中的MethodInfo类来调用WebService方法。 需要引用的名称空间 在动态调用WebService时,我们需要引用以下四个名称空间: * System.Web.Services.Description * System....

    VC++中WebService服务的调用

    在VC++中调用WebService服务是一项常见的任务,尤其在跨平台通信、系统集成或扩展应用程序功能时。WebService是一种基于Web的、松耦合的服务,它使用标准的HTTP协议进行通信,并通过XML(eXtensible Markup Language...

    .net调用webservice接口例子

    在.NET框架中,调用Web服务接口是常见的数据交互方式,尤其在分布式系统或跨平台通信中。本示例将详细讲解如何使用.NET来调用一个WebService接口,并提供相关的代码实例。 首先,让我们理解Web Service的基本概念。...

    BCB 调用WebService方法及常见问题排查

    ### BCB调用WebService方法详解及常见问题排查 #### 一、引言 在现代软件开发中,跨平台服务通信已成为一种常态。其中,WebService作为一种常见的远程服务调用方式,在不同语言之间进行交互时扮演着重要的角色。...

    C++通过gSOAP调用webservice方法返回自定义实体类

    C++做客户端,通过gSoap调用webservice,所调用的webservice方法返回的是自定义实体类,如果返回int,String等基本数据类型,这很容易实现;但这里函数返回的是List,Course,List甚至是Object,应该很有价值!

    使用Http post的方式调用webservice

    在调用WebService时,POST方法可以承载请求参数,将其封装在请求体中发送到服务端。 1. **构建HTTP请求** 在Java中,可以使用`java.net.URL`、`java.net.HttpURLConnection`或第三方库如Apache HttpClient来构建...

    C# 调用WebService的方法

    本文将详细介绍两种在C#中调用WebService的方法:静态引用和动态调用。 ### 一、创建WebService 在开始调用WebService之前,首先需要创建一个WebService。这通常涉及编写一个ASMX文件,包含一个或多个Web方法。...

    Java调用WebService接口的方法

    在Java编程中,调用Web服务接口是一种常见的任务,尤其是当需要实现跨平台通信或集成不同系统时。本文将深入探讨如何使用Java调用WebService接口,以实例分析有参方法Add的使用技巧。 首先,我们需要了解WebService...

    httpClient调用webservice接口

    ### 使用HttpClient调用WebService接口详解 #### 一、概述 在现代软件开发中,Web服务(尤其是WebService)作为实现系统间交互的一种重要手段被广泛采用。WebService提供了通过HTTP协议进行远程过程调用的能力,...

    几种调用WebService的方法

    6. **请求数据构建**:示例中的`data`变量是通过一系列字符串拼接构建的,包括XML声明、SOAP包络、SOAP体等,这些都是WebService调用时必须的结构。 #### 其他调用WebService的方法 除了使用JavaScript,还有多种...

    VB6调用WebService

    3. **调用服务方法**:通过生成的客户端代理类,你可以像调用本地方法一样调用WebService的方法,传递参数并接收返回值。 4. **处理结果**:接收到WebService的响应后,根据数据类型解析返回结果,如XML或JSON,再...

    WebService中使用自定义类的五种解决方法

    在Web服务(WebService)开发中,我们经常需要传递自定义类的数据。然而,WebService通信的基础是XML或JSON,这些格式要求传输的数据能够被序列化和反序列化。默认情况下,只有基本数据类型和某些标准库中的对象可以...

    C#动态调用WebService服务

    在.NET编程环境中,C#是一种常用的面向对象的语言,它提供了丰富的功能来与各种网络服务进行交互,包括WebService。本文将深入探讨如何在C#中实现动态调用WebService服务,主要涉及"反射"和"动态调用"这两个核心概念...

    vb6.0调用webservice详解

    3. **创建对象并调用方法**:生成的代理类中包含一个或多个对象,每个对象对应Web Service的一个服务端点。通过实例化这些对象,然后调用其方法,即可向Web Service发送请求。 4. **处理返回数据**:Web Service...

Global site tag (gtag.js) - Google Analytics