很显然,我传入的Timestamp类型的参数无法序列化,经验证BigDecimal类型的也不能序列化。
12-22 06:50:34.277: W/System.err(2861): java.lang.RuntimeException: Cannot serialize: 2014-06-13 10:36:00.0
12-22 06:50:34.297: W/System.err(2861):         at org.ksoap2.serialization.SoapSerializationEnvelope.writeElement(SoapSerializationEnvelope.java:679)
12-22 06:50:34.307: W/System.err(2861):         at org.ksoap2.serialization.SoapSerializationEnvelope.writeProperty(SoapSerializationEnvelope.java:663)
12-22 06:50:34.317: W/System.err(2861):         at org.ksoap2.serialization.SoapSerializationEnvelope.writeObjectBody(SoapSerializationEnvelope.java:632)
12-22 06:50:34.327: W/System.err(2861):         at org.ksoap2.serialization.SoapSerializationEnvelope.writeElement(SoapSerializationEnvelope.java:675)
12-22 06:50:34.337: W/System.err(2861):         at org.ksoap2.serialization.SoapSerializationEnvelope.writeProperty(SoapSerializationEnvelope.java:663)
12-22 06:50:34.347: W/System.err(2861):         at org.ksoap2.serialization.SoapSerializationEnvelope.writeObjectBody(SoapSerializationEnvelope.java:632)
12-22 06:50:34.347: W/System.err(2861):         at org.ksoap2.serialization.SoapSerializationEnvelope.writeObjectBody(SoapSerializationEnvelope.java:616)
12-22 06:50:34.357: W/System.err(2861):         at org.ksoap2.serialization.SoapSerializationEnvelope.writeElement(SoapSerializationEnvelope.java:673)
12-22 06:50:34.367: W/System.err(2861):         at org.ksoap2.serialization.SoapSerializationEnvelope.writeBody(SoapSerializationEnvelope.java:597)
12-22 06:50:34.367: W/System.err(2861):         at org.ksoap2.SoapEnvelope.write(SoapEnvelope.java:192)
12-22 06:50:34.377: W/System.err(2861):         at org.ksoap2.transport.Transport.createRequestData(Transport.java:101)
12-22 06:50:34.387: W/System.err(2861):         at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:114)
12-22 06:50:34.387: W/System.err(2861):         at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:90)
12-22 06:50:34.397: W/System.err(2861):         at com.win_d.webservice.Vw_order.o_order_Add(Vw_order.java:135)
12-22 06:50:34.397: W/System.err(2861):         at com.win_d.prj927carconservation.Activity_order_full$1.doInBackground(Activity_order_full.java:106)
12-22 06:50:34.407: W/System.err(2861):         at com.win_d.prj927carconservation.Activity_order_full$1.doInBackground(Activity_order_full.java:1)
12-22 06:50:34.417: W/System.err(2861):         at android.os.AsyncTask$2.call(AsyncTask.java:288)
12-22 06:50:34.427: W/System.err(2861):         at java.util.concurrent.FutureTask.run(FutureTask.java:237)
12-22 06:50:34.427: W/System.err(2861):         at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
12-22 06:50:34.437: W/System.err(2861):         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
12-22 06:50:34.447: W/System.err(2861):         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
12-22 06:50:34.447: W/System.err(2861):         at java.lang.Thread.run(Thread.java:841)
12-22 06:50:36.007: I/Tag(2861): java.lang.RuntimeException: Cannot serialize: 2014-06-13 10:36:00.0

解决方案 »

  1.   

    POST /OWS.asmx HTTP/1.1
    Host: localhost
    Content-Type: text/xml; charset=utf-8
    Content-Length: length
    SOAPAction: "http://tempuri.org/o_order_Add"<?xml version="1.0" encoding="utf-8"?>
    <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
      <soap:Body>
        <o_order_Add xmlns="http://tempuri.org/">
          <model>
            <collectname>string</collectname>
            <custimg>base64Binary</custimg>
            <dealimg>base64Binary</dealimg>
            <orderid>int</orderid>
            <ordercode>string</ordercode>
            <custid>int</custid>
            <custname>string</custname>
            <carno>string</carno>
            <brandid>int</brandid>
            <brandtext>string</brandtext>
            <cardtype>int</cardtype>
            <cardtypetext>string</cardtypetext>
            <mtype>int</mtype>
            <mtypetext>string</mtypetext>
            <phonenumber>string</phonenumber>
            <mileage>decimal</mileage>
            <joindate>dateTime</joindate>
            <maintenancetime>dateTime</maintenancetime>
            <noticetime>dateTime</noticetime>
            <completetime>dateTime</completetime>
            <predictime>dateTime</predictime>
            <account>decimal</account>
            <discountamount>decimal</discountamount>
            <cash>decimal</cash>
            <paymentcard>decimal</paymentcard>
            <bankcard>decimal</bankcard>
            <arrears>decimal</arrears>
            <invoicetype>int</invoicetype>
            <invoicetypetext>string</invoicetypetext>
            <invoicemoney>decimal</invoicemoney>
            <state>int</state>
            <statetext>string</statetext>
            <re>string</re>
            <userid>int</userid>
            <carid>int</carid>
            <myname>string</myname>
            <setdate>dateTime</setdate>
            <shopid>int</shopid>
            <shopname>string</shopname>
            <driverno>string</driverno>
            <engines>string</engines>
            <frameno>string</frameno>
            <pycode>string</pycode>
            <address>string</address>
            <ordermoney>decimal</ordermoney>
            <acceptid>int</acceptid>
            <acceptname>string</acceptname>
            <zeromoney>decimal</zeromoney>
            <serviceids>string</serviceids>
            <cardid>int</cardid>
            <cardno>string</cardno>
            <lessmoney>decimal</lessmoney>
          </model>
          <ordercode>string</ordercode>
          <brandid>int</brandid>
          <cardtype>int</cardtype>
        </o_order_Add>
      </soap:Body>
    </soap:Envelope>
      

  2.   

    忘掉了@大神环节亚,so...
    @hjywyj 
    @嘿木耳 
    @万境绝尘 
    @Darcy杨 
    @Cheney140504 
    @老科达 
    @修改密码 
    @等
      

  3.   

    Timestamp和BigDecimal类型 JAVA里面是序列化的接口,如果不行, 你把结果转成字符串进行传输。
      

  4.   


    12-22 06:50:34.277: W/System.err(2861): java.lang.RuntimeException: Cannot serialize: 2014-06-13 10:36:00.0
    版头大牛,上面这条log很清楚啊,我手写的Timestamp并不能序列化。我猜想,可能是这里的type错了CarMaintenanceInfo.getPropertyInfo.arg2.type = MarshalDate.DATE_CLASS;
    或者这里CarMaintenanceInfo.getPropertyInfo."变量名"=Timestamp.valueOf(arg1.toString());
    或者这里o_order_Add().new MarshalDate().register(envelope);Timestamp和BigDecimal的用法很可能是不规范的,我各种尝试都不能行。
      

  5.   


    这两个接口我确实用不好,但是全改成String之后,调用接口请求可以通过,但是envelope.getResponse();接收到的是下面这条log
    SoapFault - faultcode: 'soap:Client' faultstring: 'System.Web.Services.Protocols.SoapException: 服务器无法读取请求。 ---> System.InvalidOperationException: XML 文档(1, 293)中有错误。 ---> System.InvalidOperationException: 未识别指定的类型: name='CarMaintenanceInfo',namespace='http://tempuri.org/',位于 <model xmlns='http://tempuri.org/'>。
       在 Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReader1.Read3_o_order(Boolean isNullable, Boolean checkType)
       在 Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReader1.Read8_o_order_Add()
       在 Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer.Deserialize(XmlSerializationReader reader)
       在 System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events)
       --- 内部异常堆栈跟踪的结尾 ---
       在 System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events)
       在 System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle)
       在 System.Web.Services.Protocols.SoapServerProtocol.ReadParameters()
       --- 内部异常堆栈跟踪的结尾 ---
       在 System.Web.Services.Protocols.SoapServerProtocol.ReadParameters()
       在 System.Web.Services.Protocols.WebServiceHandler.CoreProcessRequest()' faultactor: 'null' detail: org.kxml2.kdom.Node@b3413880
      

  6.   


    大牛帮我看看我的实例化过程出了什么问题好吗?我猜想,可能是这里的type错了CarMaintenanceInfo.getPropertyInfo.arg2.type = MarshalDate.DATE_CLASS;
    或者这里CarMaintenanceInfo.getPropertyInfo."变量名"=Timestamp.valueOf(arg1.toString());
    或者这里o_order_Add().new MarshalDate().register(envelope);Timestamp和BigDecimal的用法很可能是不规范的,我各种尝试都不能行。