import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.ObjectInputStream;import org.eclipse.core.runtime.FileLocator;
import org.eclipse.core.runtime.Platform;import com.hwsy.db.sqlcon;
import com.hwsy.fssr.zsdw.sys.IAppConstants;
import com.runqian.report4.model.ReportDefine;
import com.runqian.report4.model.engine.ExtCellSet;
import com.runqian.report4.usermodel.Context;
import com.runqian.report4.usermodel.DataSourceConfig;
import com.runqian.report4.usermodel.Engine;
import com.runqian.report4.usermodel.IReport;
import com.runqian.report4.util.ReportUtils;
import com.runqian.report4.view.html.HtmlReport;public class PrintUtils {
private static sqlcon query = null;
public static void main(String[] args) {
System.out.println(getHtml());
}
public static String getHtml(){
String html = "";
String filePath = null;
String licenseFile="D:/PCPProject/com.hwsy.fssr.zsdw/reportFiles/defaultlicense.lic";
try {
filePath = FileLocator.toFileURL(
Platform.getBundle(IAppConstants.APPLICATION_ID)
.getEntry("")).getPath().toString()
+ "reportFiles/test.raq";
System.out.println("filePath="+filePath);
FileInputStream is = new FileInputStream(filePath);
ObjectInputStream ois = new ObjectInputStream( is );//此处出错
//第一步 读取报表模板 //ReportDefine rd = (ReportDefine)ReportUtils.read("D:/PCPProject/com.hwsy.fssr.zsdw/reportFiles/test.raq");
ReportDefine rd =(ReportDefine)ois.readObject();
ois.close();
is.close();
//第二步 设置报表授权文件 设置数据源工厂类 运算报表
ExtCellSet.setLicenseFileName(licenseFile);
Context context = new Context();
context.setDefDataSourceName("defaultDS");
context.setConnection("defaultDS",query.getConn());
DataSourceConfig dsoc = new DataSourceConfig(2, true, "GBK", "GBK", false);
context.setDataSourceConfig("defaultDS", dsoc);
//设置参数
context.setParamValue("arg1" ,"12");
//计算
Engine engine = new Engine(rd,context);
IReport iReport = engine.calc();
//生成字符串
HtmlReport htmlReport = new HtmlReport(iReport,"reportDS.htm");
html = htmlReport.generateHtml();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} ;
System.out.println(html);
return html;
}}
具体异常如下filePath=/D:/PCPProject/com.hwsy.fssr.zsdw/reportFiles/test.raq
java.io.StreamCorruptedException: invalid stream header: 52515152
at java.io.ObjectInputStream.readStreamHeader(Unknown Source)
at java.io.ObjectInputStream.<init>(Unknown Source)
at com.hwsy.fssr.zsdw.print.PrintUtils.getHtml(PrintUtils.java:46)
debug到这里
ObjectInputStream ois = new ObjectInputStream( is );//此处出错
跳出异常
用快逸的方法直接读则没有任何异常信息
//ReportDefine rd = (ReportDefine)ReportUtils.read("D:/PCPProject/com.hwsy.fssr.zsdw/reportFiles/test.raq");
但是也是到这里跳出。。估计异常他们给扑捉啦没打印到控制台。找了很多帖子。好像有人说jdk换1.5就可以啦。。但是我换成1.5后我本身的rcp应用程序起不来
大家帮我看看在1.6下这个异常怎么搞定哈。谢谢先分不够再加哈。。
楼主【yougucao379548695】截止到2008-07-10 15:38:26的历史汇总数据(不包括此帖):
发帖的总数量:32 发帖的总分数:1480 每贴平均分数:46
回帖的总数量:478 得分贴总数量:173 回帖的得分率:36%
结贴的总数量:31 结贴的总分数:1380
无满意结贴数:1 无满意结贴分:50
未结的帖子数:1 未结的总分数:100
结贴的百分比:96.88 % 结分的百分比:93.24 %
无满意结贴率:3.23 % 无满意结分率:3.62 %
值得尊敬
InputStream is=new FileInputStream(filePath);
ReportDefine rd=(ReportDefine)ReportUtils.read(is);
也可以直接读取报表模板:
ReportDefine rd=(ReportDefine)ReportUtils.read(filePath);
解决的方法也很简单,就是在对象序列化的时候覆盖对象流中的writeStreamHeader方法,让他什么也不做。类似下面的样子: ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(file)) {
@Override
protected void writeStreamHeader() throws IOException {
}
};