Amigo,
É a incompatibilidade da versão do seu jar que está no classpath, provavelmente não é a mesma versão ao qual o seu relatório foi gerado.
Amigo,
É a incompatibilidade da versão do seu jar que está no classpath, provavelmente não é a mesma versão ao qual o seu relatório foi gerado.
Galera,
Recebo a exceção “net.sf.jasperreports.engine.JRException: Error loading object from InputStream” quando executo o método
JasperFillManager.fillReport(inputStream, getParameters(), datasource);
Detalhando em passos:
1 - Recupero o ByteArrayOutputStream de meu relatorio;
2 - Crio um inputStream:
byte[] byteArray = baos.toByteArray();
ByteArrayInputStream bais = new ByteArrayInputStream(byteArray);
3 - Armazeno o ByteArrayInputStream do meu relatório num campo do tipo bytea no banco de dados PostGres;
String query = Constantes.INSERIR_IMAGEM_RELATORIO;
Connection conexao = con.getConnection();
PreparedStatement pstmt = conexao.prepareStatement(query);
pstmt.setInt(1, relatorio.getImagemRelatorio().getId());
//Aqui vai o atributo inputStream:
pstmt.setBinaryStream(2, relatorio.getImagemRelatorio().getImgRelatorio(), tamanho);
pstmt.setString(3, relatorio.getImagemRelatorio().getHashImgRelatorio());
pstmt.executeUpdate();
4 - Depois de armazenado o inputStream, em determinado momento em minha aplicação, obtenho esse campo do banco:
ResultSet rs = RepositorioRelatorio.getImagemRelatorio(idFormularioPromotor);
InputStream is = null;
try{
while (rs.next())
is = rs.getBinaryStream(1);
}
catch (SQLException sqlex){}
return is;
5 - Com meu inputStream recuperado, eu executo o fillReport da API JasperReports:
JasperPrint jasperPrint = JasperFillManager.fillReport(inputStream, getParameters(), datasource);
Nesse momento recebo a seguinte exceção:
net.sf.jasperreports.engine.JRException: Error loading object from InputStream
at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:196)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:580)
at br.gov.go.mp.rempro.bean.BeanRelatorioChronos.fillReport(BeanRelatorioChronos.java:24)
at br.com.password.commum.bean.AbstractReport.printReport(AbstractReport.java:81)
at br.com.password.commum.controle.ControleImpressao.processRequest(ControleImpressao.java:39)
at br.com.password.commum.controle.ControleImpressao.doGet(ControleImpressao.java:62)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
at java.lang.Thread.run(Unknown Source)
Caused by: java.io.StreamCorruptedException: invalid stream header
at java.io.ObjectInputStream.readStreamHeader(Unknown Source)
at java.io.ObjectInputStream.(Unknown Source)
at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:191)
… 21 more
Alguém sabe o que poderia ser?
Seria a forma como estou criando meu inputStream, no passo 2 acima?
Aguardo sugestões,
muito Obrigado, guilherme
Galera,
Recebo a exceção “net.sf.jasperreports.engine.JRException: Error loading object from InputStream” quando executo o método
JasperFillManager.fillReport(inputStream, getParameters(), datasource);
Detalhando em passos:
1 - Recupero o ByteArrayOutputStream de meu relatorio;
2 - Crio um inputStream:
byte[] byteArray = baos.toByteArray();
ByteArrayInputStream bais = new ByteArrayInputStream(byteArray);
3 - Armazeno o ByteArrayInputStream do meu relatório num campo do tipo bytea no banco de dados PostGres;
String query = Constantes.INSERIR_IMAGEM_RELATORIO;
Connection conexao = con.getConnection();
PreparedStatement pstmt = conexao.prepareStatement(query);
pstmt.setInt(1, relatorio.getImagemRelatorio().getId());
//Aqui vai o atributo inputStream:
pstmt.setBinaryStream(2, relatorio.getImagemRelatorio().getImgRelatorio(), tamanho);
pstmt.setString(3, relatorio.getImagemRelatorio().getHashImgRelatorio());
pstmt.executeUpdate();
4 - Depois de armazenado o inputStream, em determinado momento em minha aplicação, obtenho esse campo do banco:
ResultSet rs = RepositorioRelatorio.getImagemRelatorio(idFormularioPromotor);
InputStream is = null;
try{
while (rs.next())
is = rs.getBinaryStream(1);
}
catch (SQLException sqlex){}
return is;
5 - Com meu inputStream recuperado, eu executo o fillReport da API JasperReports:
JasperPrint jasperPrint = JasperFillManager.fillReport(inputStream, getParameters(), datasource);
Nesse momento recebo a seguinte exceção:
net.sf.jasperreports.engine.JRException: Error loading object from InputStream
at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:196)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:580)
at br.gov.go.mp.rempro.bean.BeanRelatorioChronos.fillReport(BeanRelatorioChronos.java:24)
at br.com.password.commum.bean.AbstractReport.printReport(AbstractReport.java:81)
at br.com.password.commum.controle.ControleImpressao.processRequest(ControleImpressao.java:39)
at br.com.password.commum.controle.ControleImpressao.doGet(ControleImpressao.java:62)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:18
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:10
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:52
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
at java.lang.Thread.run(Unknown Source)
Caused by: java.io.StreamCorruptedException: invalid stream header
at java.io.ObjectInputStream.readStreamHeader(Unknown Source)
at java.io.ObjectInputStream.<init>(Unknown Source)
at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:191)
... 21 more
Alguém sabe o que poderia ser?
Seria a forma como estou criando meu inputStream, no passo 2 acima?
Aguardo sugestões,
muito Obrigado, guilherme