黑马程序员技术交流社区

标题: 奇怪的Java反序列问题 [打印本页]

作者: pathetic    时间: 2016-3-16 01:54
标题: 奇怪的Java反序列问题
这是Applet程序的代码  
   private String url="http://127.0.0.1:8080/printPdf.jhtml?data={printFuntion:{print_no:\"10010\",ora_code:\"8010\"},query:{loadingbill:\"ZCD00001855\",ora_code:\"8010\"}}";
    public void  printPdf(String path){
        try {
            URL url =new URL(this.url);
            System.out.println("开始获取报表数据:"+url);  
            System.out.println( JRConstants.SERIAL_VERSION_UID);
            //JasperPrint jasperPrint = (JasperPrint)new ObjectInputStream(url.openStream()).readObject();
            Object jasperPrint=new ObjectInputStream(url.openConnection().getInputStream()).readObject();
            System.out.println("完成获取报表数据"+jasperPrint.toString());  
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
这个是后程序处理的方法
        @RequestMapping(value="/printPdf")
        public void printPdf(HttpServletRequest request,HttpServletResponse response) throws Exception {
            generationPDF.setExeSQL(connectionSQL);
            //response.setContentType("application/octet-stream");
            ObjectOutputStream oos =new ObjectOutputStream(response.getOutputStream());
            PublicGetJasperPrint p =new PublicGetJasperPrint();
            JasperPrint j =generationPDF.getJasperPrint(request);
            oos.writeObject(j);
            oos.flush();
            oos.close();
        }
我将JasperPrint  序列化到ObjectOutputStream 流中去了 然后在Applet用ObjectInputStream想反序列化出来JasperPrint对象却发现serialVersionUID版本不一致,确认的是同一个class文件JasperPrint 对象是net.sf.jasperreports.engine.JasperPrint 里面的!jre里面的jar和javaee里面的jar包是一致的!可是为什么无法反序列化读出来JasperPrint对象,一直提示serialVersionUID版本不对...难道是序列化的时候如果此类引用了其他类的话,其他类的serialVersionUID版本也需要一致? 我能猜到的也就只有这个原因了!感觉好奇怪? 目前还没有解决,由于项目中jasperreports的jar包太乱了,目前还在一个一个测试中! o(︶︿︶)o 唉


作者: pathetic    时间: 2016-3-16 01:55
一直提示serialVersionUID版本不一致,我就很纳闷了!这个类我反编译的时候发现他指定了serialVersionUID版本,和错误提示的serialVersionUID不一样!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2