本人初学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#Webservice的基本概念和C++2005如何调用Webservice接口。 一、C#Webservice的基本概念 ...
5. **处理返回结果**:WebService调用完成后,返回的结果通常会被封装在代理类的方法返回值或特定属性中。你需要根据WSDL文件的描述解析和处理这些数据。 6. **错误处理**:如同任何其他编程操作,调用WebService也...
在探讨“VB如何调用WebService”的主题时,我们首先需要理解几个关键概念:Visual Basic(简称VB),WebService,以及SOAP协议。Visual Basic是一种由微软开发的面向对象的编程语言,广泛应用于Windows平台上的应用...
本文将详细介绍两种在C#中调用WebService的方法:静态引用和动态调用。 ### 一、创建WebService 在开始调用WebService之前,首先需要创建一个WebService。这通常涉及编写一个ASMX文件,包含一个或多个Web方法。...
在这个场景中,POST方法用于传递调用WebService所需的参数。 3. **XML**:XML是一种自描述性的文本标记语言,用于存储和传输数据。在与WebService交互时,XML常被用来封装请求参数和返回的数据。 4. **调用...
- 处理返回的数据,通常是XML格式,需要解析为Java对象。 3. 调用Web Service服务步骤 - 创建SoapObject表示请求的SOAP消息。 - 设置命名空间和方法名。 - 添加参数到SoapObject。 - 创建...
TReomtable 是 WebService 中自定义类的基类,都继承自该类。TSOAPAttachment 是一种流类型,可以返回流数据。 Delphi 调用 WebService 需要使用到 Dispatch 和 Invoke 两个概念。Dispatch 是指将 SOAP 消息派遣到...
在WinForm应用程序中调用WebService是一项常见的任务,它允许客户端应用程序与远程服务器上的服务进行交互,从而实现数据交换和功能扩展。以下是如何在WinForm中实现这一操作的详细步骤及涉及的相关知识点: 1. **...
### vc6.0调用WebService的方法详解 在深入探讨如何使用Visual C++ 6.0(简称VC6.0)来调用WebService之前,我们首先需要了解几个基本概念:SOAP、WebService以及它们与VC6.0的关系。 #### SOAP(Simple Object ...
我们可以使用System.Reflection命名空间中的MethodInfo类来调用WebService方法。 需要引用的名称空间 在动态调用WebService时,我们需要引用以下四个名称空间: * System.Web.Services.Description * System....
3. **创建对象并调用方法**:生成的代理类中包含一个或多个对象,每个对象对应Web Service的一个服务端点。通过实例化这些对象,然后调用其方法,即可向Web Service发送请求。 4. **处理返回数据**:Web Service...
在VC++中调用WebService服务是一项常见的任务,尤其在跨平台通信、系统集成或扩展应用程序功能时。WebService是一种基于Web的、松耦合的服务,它使用标准的HTTP协议进行通信,并通过XML(eXtensible Markup Language...
在.NET框架中,调用Web服务接口是常见的数据交互方式,尤其在分布式系统或跨平台通信中。本示例将详细讲解如何使用.NET来调用一个WebService接口,并提供相关的代码实例。 首先,让我们理解Web Service的基本概念。...
C++做客户端,通过gSoap调用webservice,所调用的webservice方法返回的是自定义实体类,如果返回int,String等基本数据类型,这很容易实现;但这里函数返回的是List,Course,List甚至是Object,应该很有价值!
### BCB调用WebService方法详解及常见问题排查 #### 一、引言 在现代软件开发中,跨平台服务通信已成为一种常态。其中,WebService作为一种常见的远程服务调用方式,在不同语言之间进行交互时扮演着重要的角色。...
在调用WebService时,POST方法可以承载请求参数,将其封装在请求体中发送到服务端。 1. **构建HTTP请求** 在Java中,可以使用`java.net.URL`、`java.net.HttpURLConnection`或第三方库如Apache HttpClient来构建...
在Java编程中,调用Web服务接口是一种常见的任务,尤其是当需要实现跨平台通信或集成不同系统时。本文将深入探讨如何使用Java调用WebService接口,以实例分析有参方法Add的使用技巧。 首先,我们需要了解WebService...
### 使用HttpClient调用WebService接口详解 #### 一、概述 在现代软件开发中,Web服务(尤其是WebService)作为实现系统间交互的一种重要手段被广泛采用。WebService提供了通过HTTP协议进行远程过程调用的能力,...
6. **请求数据构建**:示例中的`data`变量是通过一系列字符串拼接构建的,包括XML声明、SOAP包络、SOAP体等,这些都是WebService调用时必须的结构。 #### 其他调用WebService的方法 除了使用JavaScript,还有多种...
7. **安全性与错误处理**:在调用Web Service时,还需要考虑安全性和错误处理。例如,使用HTTPS确保传输安全,处理HTTP错误代码,以及解析SOAP Faults(如果有的话)。 8. **工具与框架**:现代开发中,有许多工具...