我有一个多模块项目,它从数据库读取字节数组列并创建一个 jasper 文件以将其发送到电子邮件。
在我的 Web 应用程序中,它运行得很好,但是当从我的 Java SE 应用程序运行时,我收到以下错误:
Caused by: java.lang.RuntimeException: net.sf.jasperreports.engine.JRException: Error loading object from file : D:\file.jasper
at com.project.RReportJasper.gerarJasperPrint(RReportJasper.java:78)
at com.project.RReportJasper.gerarJasperPrint(RReportJasper.java:53)
at com.project.RReportJasper.geraRelatorioPDF(RReportJasper.java:29)
at com.project.RGenerate.geraRelatorio(RGenerate.java:63)
at com.project.AbstractUtil.gerar(AbstractUtil.java:44)
at com.project.util.Util.gerar(DameUtil.java:66)
at com.project.mail.EnvioEmailAbstractBase.montarAnexo(EnvioEmailAbstractBase.java:514)
... 16 more
奇怪的是,当从我的 Web 应用程序读取时,从数据库返回的字节为 120323 字节,而当 Java SE 应用程序读取此内容时,大小为 240645(双倍大小)
这是我的实体类:
@Entity
@Table(name= "arquivo")
public class EArquivo extends TransferObject<Long> {
private static final long serialVersionUID = -183345111110383391L;
private byte[] arquivo;
private String nome;
@Override
@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = "arquivo_id_seq")
@SequenceGenerator(name = "arquivo_id_seq", allocationSize = 1, sequenceName = "arquivo_id_seq")
@Column(name = "id_arquivo")
public Long getId() {
return id;
}
@Column (name = "arquivo")
public byte[] getArquivo() {
return arquivo;
}
public void setArquivo(byte[] arquivo) {
this.arquivo = arquivo;
}
@Column(length=80)
@Basic(fetch = FetchType.LAZY)
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
@Transient
public File getFile() throws NotFoundException {
File file = null;
try {
if(arquivo == null){
return null;
}
byte[] bytes = arquivo;
if (bytes.length == 0) {
throw new NotFoundException("Not found for: " + getFilial().getCnpj());
}
String cnpj = getFilial().getCnpj();
file = Arquivo.createTempFile("file-" + cnpj + "-", ".jasper");
FileOutputStream fos = new FileOutputStream(file);
fos.write(bytes);
fos.flush();
fos.close();
FileCleaner.track(file, file);
} catch (IOException e) {
throw new RuntimeException(e);
}
return file;
}
}
有人知道这个问题可能是什么吗?
编辑:添加如何在我的 bean 中获取文件
最佳答案
问题出在 Postgres jar 上。
在我的 Web 容器中,版本是 9.1,在我的 Java SE 应用程序中,版本是 8.4。 当我更新我的应用程序以使用 9.1 时,问题得到了解决。
关于java - 从数据库创建 Jasper 文件时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13075475/