java - 从数据库创建 Jasper 文件时出错

标签 java jasper-reports

我有一个多模块项目,它从数据库读取字节数组列并创建一个 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/

相关文章:

grails - Jasper Report 模板中的变音符号

jasper-reports - 使用 PDF 导出器渲染文本时忽略 isStretchWithOverflow 属性值

java - 如何将动态前景色应用于 JasperReport 中的文本字段

java - 将一个类似java套接字的程序放在云服务中

java - Python/Selenium - 无法获取标签的 HREF 值

java - HSQL在jdbc create array语句中引用自定义类型

java - 为什么此 XML DOM 解析器无法正确解析 rtept、name 和 cmt 标签?

java - 与 Camel 集成的基于 REST 的服务中的 API 版本管理

jasper-reports - jasperReport/iReport子报告显示为空白(未显示)

java - 如何简化标签打印对齐配置?