WebDesigner Error on Preview
Posted: Thu Jun 11, 2015 8:39 pm
Hello, i have problems in this code (only on click to preview report) (All corporate/database information is omitted):
The report xml is loaded by database table, he works fine (including, add fields dynamically by sql, as you can see in the main code).
On click to preview information, give me NullPointerException;
Code:
Error:
The report xml is loaded by database table, he works fine (including, add fields dynamically by sql, as you can see in the main code).
On click to preview information, give me NullPointerException;
Code:
Code: Select all
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<%@page import="br.com.x.classe.RelatorioXml"%>
<%@page import="br.com.x.classe.RelatorioXmlDAO"%>
<%@page import="br.com.x.classe.Relatorio"%>
<%@page import="br.com.x.classe.RelatorioDAO"%>
<%@page import="javax.xml.transform.stream.StreamResult"%>
<%@page import="javax.xml.transform.dom.DOMSource"%>
<%@page import="javax.xml.transform.TransformerFactory"%>
<%@page import="javax.xml.transform.Transformer"%>
<%@page import="java.io.StringWriter"%>
<%@page import="java.io.FileInputStream"%>
<%@page import="javax.xml.parsers.DocumentBuilderFactory"%>
<%@page import="java.io.InputStream"%>
<%@page import="java.nio.charset.StandardCharsets"%>
<%@page import="java.nio.file.Paths"%>
<%@page import="java.nio.file.Path"%>
<%@page import="java.nio.file.Files"%>
<%@page import="java.io.ByteArrayInputStream"%>
<%@page import="java.rmi.ServerException"%>
<%@page import="java.rmi.ServerError"%>
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.ResultSet"%>
<%@page import="br.com.x.conexao.HikariPoolCliente"%>
<%@page import="java.io.ByteArrayOutputStream"%>
<%@page import="org.json.simple.parser.JSONParser"%>
<%@page import="com.stimulsoft.report.components.bands.StiGroupHeaderBand"%>
<%@page import="br.com.x.helper.RelatorioHelper"%>
<%@page import="java.util.Iterator"%>
<%@page import="org.json.simple.JSONObject"%>
<%@page import="br.com.x.classe.ClienteServidor"%>
<%@page import="br.com.x.classe.ClienteServidorDAO"%>
<%@page import="com.stimulsoft.base.serializing.StiDeserializationException"%>
<%@page import="javax.security.sasl.AuthenticationException"%>
<%@page import="br.com.x.classe.RelatorioServer"%>
<%@page import="br.com.x.classe.RelatorioServerDAO"%>
<%@page import="java.sql.SQLException"%>
<%@page import="java.util.List"%>
<%@page import="com.stimulsoft.report.utils.data.StiSqlField"%>
<%@page import="com.stimulsoft.report.dictionary.StiDataColumn"%>
<%@page import="com.stimulsoft.report.utils.data.StiDataColumnsUtil"%>
<%@page import="java.sql.DriverManager"%>
<%@page import="com.stimulsoft.report.utils.data.StiTableFildsRequest"%>
<%@page import="java.sql.Connection"%>
<%@page import="java.io.File"%>
<%@page import="com.stimulsoft.report.StiSerializeManager"%>
<%@page import="com.stimulsoft.report.StiReport"%>
<%@page import="com.stimulsoft.report.dictionary.databases.StiMySqlDatabase"%>
<%@page import="com.stimulsoft.report.dictionary.adapters.StiMySqlAdapter"%>
<%@page import="com.stimulsoft.report.dictionary.adapters.StiJDBCParameters"%>
<%@page import="java.util.Properties"%>
<%@page import="com.stimulsoft.report.dictionary.dataSources.StiSqlSource"%>
<%@page import="com.stimulsoft.webdesigner.StiWebDesignerOptions"%>
<%@page import="com.stimulsoft.webdesigner.StiWebDesigerHandler"%>
<%@page language="java" contentType="text/html; charset=utf-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://stimulsoft.com/webdesigner" prefix="stiwebdesigner"%>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Web Designer</title>
<stiwebdesigner:resources />
</head>
<body>
<%
String chaveSessao = request.getParameter("chs");
if (chaveSessao == null)
throw new AuthenticationException("Acesso negado!");
final RelatorioDAO relatorioDAO = new RelatorioDAO();
final RelatorioServerDAO relatorioServerDAO = new RelatorioServerDAO();
final ClienteServidorDAO clienteDAO = new ClienteServidorDAO();
final RelatorioServer relatorioServer = request.getSession().getAttribute(chaveSessao) == null ?
relatorioServerDAO.getRelatorioPorChave(chaveSessao) :
(RelatorioServer) request.getSession().getAttribute(chaveSessao);
final ClienteServidor clienteServidor = clienteDAO.getClientePorID(relatorioServer.getCliente());
/* Conexão cliente */
final HikariPoolCliente poolCliente = HikariPoolCliente.getInstance();
poolCliente.setJdbcUrl(clienteServidor.getHost() + ":" + clienteServidor.getPorta() + "/" + clienteServidor.getDatabase());
poolCliente.setUsername(clienteServidor.getUsuario());
poolCliente.setPassword(clienteServidor.getSenha());
/* Fim conexão cliente */
/* Conexão cliente para o relatório*/
final StiMySqlDatabase reportDatabase =
new StiMySqlDatabase(
"xyz",
"xyz",
"host=" + clienteServidor.getHost() + ";port="+ clienteServidor.getPorta()
+ ";database=" + clienteServidor.getDatabase() + ";user=" + clienteServidor.getUsuario()
+ ";password=" + clienteServidor.getSenha() + ";");
/* Fim conexão cliente para o relatório */
final Relatorio relatorio = relatorioDAO.getRelatorioPorNome(relatorioServer.getNome(), poolCliente);
StiWebDesignerOptions options = new StiWebDesignerOptions();
options.setLocalization(request.getSession().getServletContext().getRealPath("/localization/pt-BR.xml"));
/*
Eventos
*/
StiWebDesigerHandler handler = new StiWebDesigerHandler() {
/*
Ação que será executada quando abrir o editor;
*/
public StiReport getEditedReport(HttpServletRequest request) {
try {
StiReport report = null;
if (relatorio != null) {
RelatorioXmlDAO relatorioXmlDAO = new RelatorioXmlDAO();
RelatorioXml relatorioXml = relatorioXmlDAO.getRelatorioPorCodigo(relatorio.getId(), poolCliente);
if (relatorioXml != null) {
InputStream stream = new ByteArrayInputStream(relatorioXml.getValor().getBytes(StandardCharsets.UTF_8));
report = StiSerializeManager.deserializeReport(stream);
}
}
if (report != null) {
report.getDictionary().getDatabases().clear();
report.getDictionary().getDataSources().clear();
report.getDictionary().getDatabases().add(reportDatabase);
StiSqlSource datas_dados = new StiSqlSource("xyz", "datas_dados", "datas_dados", "", true, false);
report.getDictionary().getDataSources().add(datas_dados);
StiJDBCParameters param = new StiMySqlAdapter(reportDatabase.getConnectionString()).getJdbcParameters();
Class.forName(param.getDriverName());
Properties info = new Properties();
info.setProperty("user", param.getUser());
info.setProperty("password", param.getPassword());
info.putAll(param.getOther());
//Converter JSON em string em JAVA : http://stackoverflow.com/questions/1395551/convert-a-json-string-to-object-in-java
try {
JSONObject json = (JSONObject) new JSONParser().parse(relatorioServer.getParametro());
Iterator jsonIterator = json.keySet().iterator();
while (jsonIterator.hasNext()){
String chave = jsonIterator.next().toString();
String valor = (String) json.get(chave);
if ("vr_sql_datas".equalsIgnoreCase(chave)) {
Connection con = DriverManager.getConnection(param.getConnectionURL(), info);
StiTableFildsRequest requisicao = StiDataColumnsUtil.getFields(con, valor);
List<StiSqlField> fields = requisicao.getColunns();
for (StiSqlField field : fields) {
report.getDictionary().getDataSources().get("datas_dados").getColumns().add(
new StiDataColumn(
field.getName(), field.getName(), field.getSystemType()
)
);
}
} else {
report.getVariables().put(chave, json.get(chave));
}
}
} catch (IndexOutOfBoundsException | NullPointerException e) {
e.printStackTrace();
}
}
return report;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/*
Ação que será executada quando clicar em {abrir};
*/
public void onOpenReportTemplate(StiReport report,
HttpServletRequest request) {
}
/*
Ação que será executada quando clicar em {novo};
*/
public void onNewReportTemplate(StiReport report,
HttpServletRequest request) {
}
/*
Ação que será executada quando clicar em {salvar};
*/
public void onSaveReportTemplate(StiReport report,
String reportName, HttpServletRequest request) {
try {
/* XML resultado das alterações */
ByteArrayOutputStream output = new ByteArrayOutputStream();
StiSerializeManager.serializeReport(report, output);
/* Fim XML resultado das alterações */
RelatorioXml relatorioXml = null;
RelatorioXmlDAO relatorioXmlDAO = new RelatorioXmlDAO();
if (relatorio != null) {
relatorioXml = relatorioXmlDAO.getRelatorioPorCodigo(relatorio.getId(), poolCliente);
if (relatorioXml != null) {
relatorioXml.setValor(output.toString());
relatorioXmlDAO.setSalvarRelatorio(relatorioXml, poolCliente);
}
}
} catch (ServletException e) {
throw new RuntimeException(e);
}
}
};
pageContext.setAttribute("handler", handler);
pageContext.setAttribute("options", options);
%>
<stiwebdesigner:webdesigner handler="${handler}" options="${options}" />
</body>
</html>
Error:
Code: Select all
jun 11, 2015 5:32:06 PM com.stimulsoft.lib.io.StiCloseUtil close
INFORMAÇÕES: Close connection: com.mysql.jdbc.JDBC4Connection@feda083
java.lang.NullPointerException
at com.stimulsoft.report.dictionary.dataSources.StiDataSource.getDatabase(StiDataSource.java:1014)
at com.stimulsoft.report.dictionary.dataSources.StiDataStoreSource.disconnect(StiDataStoreSource.java:98)
at com.stimulsoft.report.dictionary.dataSources.StiDataSourcesCollection.disconnect(StiDataSourcesCollection.java:90)
at com.stimulsoft.report.dictionary.StiDictionary.Disconnect(StiDictionary.java:1607)
at com.stimulsoft.report.engine.engineV2.StiRenderProviderV2.DisconnectFromData(StiRenderProviderV2.java:407)
at com.stimulsoft.report.engine.engineV2.StiRenderProviderV2.Render(StiRenderProviderV2.java:315)
at com.stimulsoft.report.engine.engineV2.builders.StiReportV2Builder.RenderSingleReport(StiReportV2Builder.java:64)
at com.stimulsoft.report.StiReport.RenderReport(StiReport.java:1939)
at com.stimulsoft.report.StiReport.Render(StiReport.java:1840)
at com.stimulsoft.report.StiReport.Render(StiReport.java:1775)
at com.stimulsoft.report.StiReport.Render(StiReport.java:1765)
at com.stimulsoft.webdesigner.helper.StiReportEdit.getPreviewPages(StiReportEdit.java:4623)
at com.stimulsoft.webdesigner.StiWebDesigner.getReportSnapshotCallbackResult(StiWebDesigner.java:1091)
at com.stimulsoft.webdesigner.StiWebDesigner.getReportSnapshotResult(StiWebDesigner.java:934)
at com.stimulsoft.webdesigner.StiWebDesigner.getReportSnapshotResult(StiWebDesigner.java:909)
at com.stimulsoft.webdesigner.servlet.StiWebDesignerActionServlet.processing(StiWebDesignerActionServlet.java:65)
at com.stimulsoft.webdesigner.servlet.StiWebDesignerActionServlet.doPost(StiWebDesignerActionServlet.java:45)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:644)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:516)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1086)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:659)
at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:223)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1558)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1515)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)