网络是局域网,传输过程不知道是否丢包,对方收到时会报java.io.EOFException...
webService有没有传输大小的限制啊,我在网上看到别人传几十M都没问题,我这边一般只能收到几K,最大的时候是3K,对方发了7K,这是什么情况?

解决方案 »

  1.   


    public static byte[] writeList2ByteArray(List objList) {
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    ObjectOutputStream oos = null;
    try {
    oos = new ObjectOutputStream(baos);
    oos.writeObject(objList);
    return baos.toByteArray();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } finally {
    try {
    oos.close();
    baos.close();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } }
    return null;
    }public static  List readFromByte(byte[] b) {
    ByteArrayInputStream bais = new ByteArrayInputStream(b);
    ObjectInputStream ois = null;
    try {
    ois = new ObjectInputStream(bais);
    Serializable obj = (Serializable) ois.readObject();
    if (obj instanceof List) {
    return (List) obj;
    }
    } catch (IOException e) {
    e.printStackTrace();
    } catch (ClassNotFoundException e) {
    e.printStackTrace();
    } finally {
    try {
    ois.close();
    bais.close();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } }
    return null; }public OptionResult doPost(String tablename,String seqname,int localseq,int lastsyncseq,byte[] b,List<TableInfo> tlist) {
    logger.info("\n\n\n%%%%%%  tablename " + tablename+" ,receive byte :" + (b == null?0 : b.length) + " %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n\n\n");
    OptionResult result = new OptionResult();
    try{
    if(b == null || b.length == 0){
    result.setSuccess(true);
    result.setMsg("无数据,忽略");
    return result;
    }
    logger.info("对象机:" + DbSyncConfig.TARGET_MACHINE_WEB_SERVICE_URL);
    logger.info("开始同步doPost:tablename="+ tablename +",lastsyncseq="+lastsyncseq + ",localseq="+localseq);
    com.cimc.imeeting.webservice.syn.client.DbSyncronizer service = new com.cimc.imeeting.webservice.syn.client.DbSyncronizer();
    com.cimc.imeeting.webservice.syn.client.DbSyncronizerPortType portType = service.getDbSyncronizerHttpPort();
    com.cimc.imeeting.webservice.syn.client.OptionResult or = portType.doWrite(tablename,seqname, localseq, lastsyncseq,b);


    if(or.isSuccess()){
    for(TableInfo ti : tlist){
    if(tablename.equals(ti.getTablename())){
    ti.setLastsyncseqwrite(localseq);
    }
    }
    XmlUtilSync.getInstance().saveXml(tlist);
    logger.info("本次同步结果保存到本地文件OKAY:tablename="+ tablename +",lastsyncseq="+lastsyncseq + ",localseq="+localseq);
    } else{
    logger.info("对象机操作失败,失败原因是:" + or.getMsg());
    }
    result.setSuccess(true);
    }catch (WebServiceException e) {
    result.setMsg(e.getMessage());
    result.setSuccess(false);
    sendSMS(DbSyncConfig.SMS_NOTICE_CELLPHONE , DbSyncConfig.SMS_NOTICE_CONTENT_WEBSERVICE_CONNECTION_EXCEPTION + new Date().toString()  + e.getMessage());
    logger.error("WebServiceException :" + e.getMessage());
    }catch(Exception ex){
    result.setMsg(ex.getMessage());
    result.setSuccess(false);
    }
    return result;
    }public OptionResult doWrite(String tablename, String seqname, int localseq,
    int lastsyncseq, byte[] b) {
    OptionResult result = new OptionResult();
    try{
    //FIXME  check the data before write.
    DBUtil util = new DBUtil();
    int lastId = util.writeToLocal(tablename, b);

    result.setSuccess(true);
    result.setMsg(lastId + "");
    }catch(Exception ex){
    result.setMsg(ex.getMessage());
    result.setSuccess(false);
    }

    return result;
    }上面是序列化和反序列化,还有调用的代码,异常就出在反序列化中抛出的!
    求帮忙检查一下啊,代码有点多,这里就贴出了部分核心代码了
      

  2.   

    java.io.EOFException
    at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2281)
    at java.io.ObjectInputStream$BlockDataInputStream.readUTFBody(ObjectInputStream.java:3019)
    at java.io.ObjectInputStream$BlockDataInputStream.readUTF(ObjectInputStream.java:2820)
    at java.io.ObjectInputStream.readUTF(ObjectInputStream.java:1051)
    at java.io.ObjectStreamClass.readNonProxy(ObjectStreamClass.java:616)
    at java.io.ObjectInputStream.readClassDescriptor(ObjectInputStream.java:809)
    at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1565)
    at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1496)
    at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1583)
    at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1496)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1732)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
    at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947)
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
    at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947)
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
    at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947)
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
    at java.util.ArrayList.readObject(ArrayList.java:593)
    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 java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:974)
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1849)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
    at com.cimc.imeeting.webservice.syn.DBUtil.readFromByte(DBUtil.java:329)
    at com.cimc.imeeting.webservice.syn.DBUtil.writeToLocal(DBUtil.java:370)
    at com.cimc.imeeting.webservice.syn.DbSyncronizerImpl.doWrite(DbSyncronizerImpl.java:164)
    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.codehaus.xfire.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:59)
    at org.codehaus.xfire.service.invoker.ObjectInvoker.invoke(ObjectInvoker.java:45)
    at org.codehaus.xfire.service.binding.ServiceInvocationHandler.sendMessage(ServiceInvocationHandler.java:320)
    at org.codehaus.xfire.service.binding.ServiceInvocationHandler$1.run(ServiceInvocationHandler.java:86)
    at org.codehaus.xfire.service.binding.ServiceInvocationHandler.execute(ServiceInvocationHandler.java:134)
    at org.codehaus.xfire.service.binding.ServiceInvocationHandler.invoke(ServiceInvocationHandler.java:109)
    at org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:131)
    at org.codehaus.xfire.transport.DefaultEndpoint.onReceive(DefaultEndpoint.java:64)
    at org.codehaus.xfire.transport.AbstractChannel.receive(AbstractChannel.java:38)
    at org.codehaus.xfire.transport.http.XFireServletController.invoke(XFireServletController.java:304)
    at org.codehaus.xfire.transport.http.XFireServletController.doService(XFireServletController.java:129)
    at org.codehaus.xfire.transport.http.XFireServlet.doPost(XFireServlet.java:116)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:643)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.struts2.dispatcher.ActionContextCleanUp.doFilter(ActionContextCleanUp.java:102)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
    at java.lang.Thread.run(Thread.java:619)