利用Soap2调用webService接口用AS打包后出错小结

来源:互联网 发布:王者荣耀用户数据分析 编辑:程序博客网 时间:2024/06/07 23:31

项目中用到了xStream将对象封装成xml进行通讯的功能(这里用到了ksoap2-android-assembly-3.6.2-jar-with-dependencies.jar),测试一切都正常,将项目用AndroidStudio打包后发现app中总是连不上网,查看log有如下错误:

getMessageList: request xml ... <reqMsg>                                   operater>admin</operater>                                    <reqDetail>                                       <Kp>1</Kp>                                       <Kq>20</Kq>                                    </reqDetail>                                 </reqMsg>12-05 16:59:42.678 17252-17339/? W/System.err: SoapFault - faultcode: 'soapenv:Server.userException' faultstring: 'com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter$UnknownFieldException: No such field com.platform.app.service.xmlpo.ReqDetail.Kp12-05 16:59:42.678 17252-17339/? W/System.err: ---- Debugging information ----12-05 16:59:42.678 17252-17339/? W/System.err: field               : Kp12-05 16:59:42.678 17252-17339/? W/System.err: class               : com.platform.app.service.xmlpo.ReqDetail12-05 16:59:42.678 17252-17339/? W/System.err: required-type       : com.platform.app.service.xmlpo.ReqDetail12-05 16:59:42.678 17252-17339/? W/System.err: converter-type      : com.thoughtworks.xstream.converters.reflection.ReflectionConverter12-05 16:59:42.678 17252-17339/? W/System.err: path                : /reqMsg/reqDetail/Kp12-05 16:59:42.678 17252-17339/? W/System.err: line number         : 412-05 16:59:42.678 17252-17339/? W/System.err: class[1]            : com.platform.app.service.xmlpo.ReqMsg12-05 16:59:42.678 17252-17339/? W/System.err: version             : null12-05 16:59:42.678 17252-17339/? W/System.err: -------------------------------' faultactor: 'null' detail: org.kxml2.kdom.Node@2359198112-05 16:59:42.678 17252-17339/? W/System.err:     at org.ksoap2.serialization.SoapSerializationEnvelope.parseBody(SourceFile:136)12-05 16:59:42.678 17252-17339/? W/System.err:     at org.ksoap2.SoapEnvelope.parse(SourceFile:140)12-05 16:59:42.678 17252-17339/? W/System.err:     at org.ksoap2.transport.Transport.parseResponse(SourceFile:129)12-05 16:59:42.678 17252-17339/? W/System.err:     at org.ksoap2.transport.HttpTransportSE.parseResponse(SourceFile:304)12-05 16:59:42.678 17252-17339/? W/System.err:     at org.ksoap2.transport.HttpTransportSE.call(SourceFile:276)12-05 16:59:42.678 17252-17339/? W/System.err:     at org.ksoap2.transport.HttpTransportSE.call(SourceFile:118)12-05 16:59:42.678 17252-17339/? W/System.err:     at org.ksoap2.transport.HttpTransportSE.call(SourceFile:113)12-05 16:59:42.678 17252-17339/? W/System.err:     at com.hrmp.c.a$1$1.run(SourceFile:59)12-05 16:59:42.678 17252-17339/? W/System.err:     at java.lang.Thread.run(Thread.java:818)

发现请求的xml跟自己项目中的字段名字不一致,这里的Kp和Kq原本是PageSize和PageNum,再往下看发现ReqDetail 和 SoapSerializationEnvelope出现异常,回项目的ReqDetail的类查询一下果然,


利用xStream标记的类需要序列化,而开始的时候ReqDetail并没有实现Serializable接口的,因此在发起请求的时候出现了异常。

其实很容易判断,但是应该在写代码的时候就杜绝,因为XStream的原理就是用于序列化对象与 XML 对象之间的相互转换。


原创粉丝点击