`
schy_hqh
  • 浏览: 558070 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Exception处理:服务端返回对象与客户端类型不一致XXX cannot be cast to XXX

 
阅读更多

描述:

      服务端向客户端返回数据时,发生类型转换异常!

      服务端定义的model:Student与wsdl中定义的Student类型不一致。

 

      服务端通过本地编写好的wsdl文件(契约优先),使用jaxws-maven-plugin在compile阶段自动将wsdl文件转换为java文件。其存放到了/target/jaxws/wsimport/java目录下。

     服务端使用cargo-maven2-plugin来启动tomcat服务器,配置为standalone类型。

 

分析:

      使用Maven的package命令时,会将上述由wadl转换而成的java文件自动加载到class,正是由于将多余的

这些class文件放到了WEB-INF/classes目录下,最后造成服务端运行的接口文件实际上是没有经过改造的那个接口文件。

     正确的接口文件应该是删除掉class="xxxx"属性接口才是正确的!!!

 

 

解决方案:

    删除绑定在compile阶段执行jaxws-maven-plugin的wsimport功能,需要转换时手动进行!

    将转换wsdl为java的命令单独手动执行,不要绑定到某个执行阶段上。

    执行package命令时,确保通过wsdl转换而成的java文件不在target目录下。

    这样,打包的时候就不会将那些文件打包到classes目录中了!

 

结论:容器运行环境中webservice接口的classes文件仍然是初始导出的java接口,最后造成类型转换异常。

 

异常信息:

javax.xml.ws.soap.SOAPFaultException: com.hqh.student.model.Student cannot be cast to com.hqh.student.ws.Student
	at com.sun.xml.internal.ws.fault.SOAP11Fault.getProtocolException(SOAP11Fault.java:178)
	at com.sun.xml.internal.ws.fault.SOAPFaultBuilder.createException(SOAPFaultBuilder.java:111)
	at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:108)
	at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:78)
	at com.sun.xml.internal.ws.client.sei.SEIStub.invoke(SEIStub.java:107)
	at $Proxy30.getStudent(Unknown Source)
	at com.hqh.ws.test.TestStudent.testGetStudent(TestStudent.java:23)
	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 org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
	at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

 

 

 

 

分享到:
评论

相关推荐

    C#中客户端通过http协议访问服务端

    它基于请求-响应模型,即客户端发起一个请求,服务端接收并处理请求,然后返回响应。在C#中,我们可以使用System.Net命名空间中的HttpClient类来创建HTTP请求并处理响应。 标题“C#中客户端通过http协议访问服务端...

    wcf服务端与客户端的例子

    5. **异常处理**:WCF异常可以通过`FaultException`捕获,这允许服务端向客户端传递错误信息。 6. **安全性**:客户端可以配置身份验证、加密等安全选项,确保通信安全。例如,使用证书、用户名/密码等。 **三、...

    解决cannot be cast to javax.servlet.Filter 报错的问题

    cannot be cast to javax.servlet.Filter 报错, 原因servlet-api.jar冲突 使用maven开发web应用程序, 启动的时候报错: jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/...

    客户端与服务器SSL双向认证(客户端:java-服务端:java)

    - 在编程中,需要捕获可能的SSLException和其他相关异常,例如证书不受信任、证书过期等,并给出适当的错误提示。 通过上述步骤,我们可以实现Java客户端和服务器之间的SSL双向认证。在实际应用中,这可以确保数据...

    memcached 完整的项目,服务端(win) 客户端 包括jar包

    Java 客户端库允许 Java 应用程序与 Memcached 服务端进行通信。`memcache.zip` 中包含的是 `memcached-java-client-2.6.3.jar`,这是一个支持 Java 平台的 Memcached 客户端库。使用步骤如下: 1. 将 `memcached-...

    Uncaught DOMException:

    标题“Uncaught DOMException:”通常出现在JavaScript编程中,指的是在执行代码时遇到了一个未捕获的DOM(Document Object Model)异常。这个错误通常意味着在访问或操作DOM元素时发生了问题,可能是由于尝试访问不...

    TCP客户端与服务端的通信传输

    - **创建客户端**: 通过`Socket`类创建一个客户端对象,并指定IP地址和端口。 - **建立连接**: 使用`Connect()`方法与服务端建立连接。 - **读写数据**: 通过`Send()`和`Receive()`方法发送和接收数据。 - **关闭...

    Socket服务端客户端以tcp/ip协议发送接收报文

    本教程将详细讲解如何利用Java Socket实现基于TCP/IP的服务端和客户端之间的报文发送与接收。 TCP(传输控制协议)是一种面向连接、可靠的传输协议,它确保了数据包的有序和无损传输。IP(互联网协议)则是互联网上...

    代码配置WCF服务端和客户端

    - 故障处理:服务端应处理可能出现的异常,并通过`FaultException`向客户端传达错误信息。 - 性能优化:可以通过调整绑定配置(如缓冲模式、最大消息大小等)来优化性能。 - 服务发现:若需要动态发现服务,可以使用...

    server client客户端服务端

    - **服务端**:读取来自客户端的数据,处理后返回响应给客户端。 #### 4. 关闭连接 - **客户端**:完成数据交换后,关闭输出流、输入流和Socket连接。 - **服务端**:处理完所有客户端请求后,关闭所有已打开的...

    spring boot 整合的netty 实现的socket的服务端和客户端

    客户端配置的方式与服务端类似,只是不需要`childHandler`,而是设置自己的`ChannelInitializer`来初始化连接到服务器的`SocketChannel`: ```java Bootstrap b = new Bootstrap(); b.group(new NioEventLoopGroup...

    activeMQ 服务端客户端 java代码

    在 Java 开发环境中,ActiveMQ 提供了丰富的 API 和工具,使得开发者能够方便地在服务端和客户端之间发送和接收消息。 ### 1. ActiveMQ 服务端配置与启动 首先,我们需要在服务器端安装并配置 ActiveMQ。通常,...

    JAVA FTP 文件传输 服务端 客户端

    3. **数据传输**: FTP协议分为控制连接和数据连接,服务端需要处理这两种连接的建立与关闭。数据传输可以是主动模式(服务器主动打开数据连接)或被动模式(客户端打开数据连接)。 4. **命令解析**: FTP命令如`...

    Socket客户端和服务端的编程实现(C和android附运行截图).docx

    ### Socket客户端和服务端的编程实现(C和Android) #### 实验目的及要求 - **理解套接字(Socket)通信的基本原理和机制**:了解Socket的工作方式及其在网络通信中的作用。 - **理解进程间通信的机制**:熟悉不同进程...

    C#窗体异步套接字(服务端与客户端)

    在.NET框架中,C#语言提供了丰富的网络编程接口,其中包括异步套接字。异步套接字编程是网络通信中的重要技术,它允许程序在等待网络操作完成...通过不断实践和优化,可以实现更加复杂和稳定的服务端与客户端通信场景。

    安卓websocket(客服端和服务端写在app端) 案例

    WebSocket是一种在客户端与服务器之间建立持久连接的协议,它允许双方进行全双工通信,即数据可以在两个方向上同时传输。在安卓应用开发中,WebSocket常用于实现实时通信,如在线聊天、实时推送通知、游戏同步等场景...

    com.microsoft.sqlserver.jdbc.SQLServerException: 只进结果集不支持请求的操作 解决方案

    本文将深入探讨标题和描述中提到的“com.microsoft.sqlserver.jdbc.SQLServerException: 只进结果集不支持请求的操作”这一异常,以及如何在使用Hibernate、Struts进行分页时避免这一问题。我们将从异常的根本原因...

    C#使用RemObjects的EventSinks实现服务端对客户端的通讯

    在传统的客户端/服务端通信模式中,大多数情况下是由客户端发起请求,服务端被动接收并处理请求后返回结果给客户端。然而,在某些应用场景下,如实时数据更新通知、新用户加入提醒等场景,需要服务端主动向客户端推...

    android文件上传(客户端+服务端)

    在Android应用开发中,文件上传是一项常见的任务,无论是图片、文档还是其他类型的文件,都需要将它们从客户端(手机端)发送到服务器进行处理或存储。本教程将详细讲解如何实现Android客户端的文件上传,以及服务端...

Global site tag (gtag.js) - Google Analytics