Page 1 of 1

WebDesigner Error on Preview

Posted: Thu Jun 11, 2015 8:39 pm
by rafaelwithoeft
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:

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)

Re: WebDesigner Error on Preview

Posted: Fri Jun 12, 2015 7:20 am
by Vadim
Hello.
You should set Dictionary for datas_dados:

Code: Select all

datas_dados.setDictionary(report.getDictionary());

Re: WebDesigner Error on Preview

Posted: Mon Jun 15, 2015 12:46 pm
by rafaelwithoeft
Thank you!

Re: WebDesigner Error on Preview

Posted: Mon Jun 15, 2015 12:55 pm
by Alex K.
Hello,

We are always glad to help you!
Let us know if you need any additional help.

Thank you.