Carissimi,
dall'ora del post capirete la mia situazione; non so quanti di voi si siano trovati e restare sveglio per due notti di file ma vi assicuro che non è piacevole!
Come sapete la mia web application include una servlet che apre un Jasper Report, che al suo interno ne include un altro, che a sua volta ne include un altro. Dal tool di ireport tutto si apre correttamente. Inglobando i jasper nella mia applicazione, dall'ide Eclipse la servlet apposita apre correttamente i report. Caricando il war sul Tomcat locale tutto funziona benissimo.
Se carico in remoto invece si apre il report padre con i dati corretti, ma dove dovrebbero esserci i sottoreport non vedo alcunché e dove dovrebbero esserci le somme di ritorno dei sottoreport vedo la scritta "null". Sappiate che invece tutti gli altri report singoli (non con sottoreport) si aprono benissimo. Da cosa può dipendere? Sappiate che non dipende dal percorso dei sottoreport: se il percorso presenta qualsiasi errore (ho fatto diverse prove, sia nel nome del sottoreport, che nella modalità di acquisizione del path), vedo semplicemente una pagina completamente bianca e non lo strano report che vedo, col report padre corretto ma con il sottoreport bianco.
Da cosa può dipendere? Con 72 ore di veglia e la testa che gira siete rimasti solo voi.
Grazie!
Archimede
Per tutti i casi copio la servlet sotto, ribadendovi ancora che non si tratta di problemi lagti al path del sottoreport e che in locale tutto funziona a meraviglia.
codice:
package servletReport;
import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import dao.DAOMain;
/**
* Servlet implementation class for Servlet: ServletReportStreamPDF
*
*/
public class ServletReportStreamPDF extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
static final long serialVersionUID = 1L;
/* (non-Java-doc)
* @see javax.servlet.http.HttpServlet#HttpServlet()
*/
public ServletReportStreamPDF() {
super();
}
/* (non-Java-doc)
* @see javax.servlet.http.HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
String rptFileName = request.getParameter("rptFileName").toString();
String rptFolder = "report";
JasperPrint jp = null;
ServletContext context = this.getServletContext();
String mainid = "";
String secid = "";
String subpath = "";
String mainstring = "";
if (request.getParameter("mainid") == null){
mainid = "0";
}
else
{
if (request.getParameter("mainid") != null){
mainid = request.getParameter("mainid");
}
}
if (request.getParameter("mainstring") == null){
mainstring = "";
}
else
{
if (request.getParameter("mainstring") != null){
mainstring = request.getParameter("mainstring");
}
}
if (request.getParameter("secid") == null){
secid = "0";
}
else
{
if (request.getParameter("secid") != null){
secid = request.getParameter("secid");
}
}
if (request.getParameter("subpath") == null){
subpath = "";
}
else
{
if (request.getParameter("subpath") != null){
subpath = request.getParameter("subpath");
}
}
Map parameters = new HashMap();
parameters.put("mainid", new Integer(mainid));
parameters.put("mainstring", mainstring);
parameters.put("secid", new Integer(secid));
parameters.put("subpath", subpath);
parameters.put("SUBREPORT_DIR", context.getRealPath(rptFolder + "//" + subpath + "//" + "rptFatCanFor_subFor.jasper"));
parameters.put("SUB_SUBREPORT_DIR", context.getRealPath(rptFolder + "//" + subpath + "//" + "rptFatCanFor_subFor_subFat.jasper"));
Connection Conn = null;
DAOMain rptDAO = new DAOMain();
try {
Conn = rptDAO.myCn();
} catch (InstantiationException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IllegalAccessException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (ClassNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
jp = JasperFillManager.fillReport(context.getResourceAsStream("/" + rptFolder + "/" + subpath + "/" + rptFileName + ".jasper"), parameters, Conn);
} catch (JRException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ServletOutputStream outStream = response.getOutputStream();
try {
JasperExportManager.exportReportToPdfStream(jp, outStream);
} catch (JRException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/* (non-Java-doc)
* @see javax.servlet.http.HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request,response);
}
}