WebDesigner Error on Preview

Stimulsoft Reports.JAVA discussion
Post Reply
User avatar
rafaelwithoeft
Posts: 70
Joined: Thu Mar 05, 2015 8:26 pm

WebDesigner Error on Preview

Post 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)
Vadim
Posts: 409
Joined: Tue Apr 23, 2013 11:23 am

Re: WebDesigner Error on Preview

Post by Vadim »

Hello.
You should set Dictionary for datas_dados:

Code: Select all

datas_dados.setDictionary(report.getDictionary());
User avatar
rafaelwithoeft
Posts: 70
Joined: Thu Mar 05, 2015 8:26 pm

Re: WebDesigner Error on Preview

Post by rafaelwithoeft »

Thank you!
Alex K.
Posts: 6488
Joined: Thu Jul 29, 2010 2:37 am

Re: WebDesigner Error on Preview

Post by Alex K. »

Hello,

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

Thank you.
Post Reply