Jump to content
We've recently updated our Privacy Statement, available here ×

dobinhtru

Members
  • Posts

    1
  • Joined

  • Last visited

dobinhtru's Achievements

Newbie

Newbie (1/14)

  • Week One Done
  • One Month Later
  • One Year In
  • First Post Rare
  • Conversation Starter Rare

Recent Badges

0

Reputation

  1. Hi All, I have a sample about Jasper Report. I used Eclipse Helios Release and Tomcat 6.0 Libirary: jasperreports-0.6.5.jar and jdt-compiler-3.1.1.jar When deploy this sample to Tomcat and browser,it no have proble but when I run to view jasper report,it throw exception: Exception in thread "Thread-8" java.lang.NoSuchMethodError: org.eclipse.jdt.internal.compiler.env.NameEnvironmentAnswer.<init>(Lorg/eclipse/jdt/internal/compiler/env/IBinaryType;)V at net.sf.jasperreports.engine.design.JRJdtCompiler$1.findType(JRJdtCompiler.java:235) at net.sf.jasperreports.engine.design.JRJdtCompiler$1.findType(JRJdtCompiler.java:204) at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.askForType(LookupEnvironment.java:119) at org.eclipse.jdt.internal.compiler.lookup.PackageBinding.getType(PackageBinding.java:126) at org.eclipse.jdt.internal.compiler.lookup.Scope.findType(Scope.java:1351) at org.eclipse.jdt.internal.compiler.lookup.Scope.getTypeOrPackage(Scope.java:2455) at org.eclipse.jdt.internal.compiler.lookup.Scope.getType(Scope.java:2177) at org.eclipse.jdt.internal.compiler.ast.SingleTypeReference.getTypeBinding(SingleTypeReference.java:39) at org.eclipse.jdt.internal.compiler.ast.TypeReference.resolveType(TypeReference.java:141) at org.eclipse.jdt.internal.compiler.ast.TypeReference.resolveSuperType(TypeReference.java:104) at org.eclipse.jdt.internal.compiler.lookup.ClassScope.findSupertype(ClassScope.java:1107) at org.eclipse.jdt.internal.compiler.lookup.ClassScope.connectSuperclass(ClassScope.java:767) at org.eclipse.jdt.internal.compiler.lookup.ClassScope.connectTypeHierarchy(ClassScope.java:947) at org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.connectTypeHierarchy(CompilationUnitScope.java:258) at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.completeTypeBindings(LookupEnvironment.java:195) at org.eclipse.jdt.internal.compiler.Compiler.beginToCompile(Compiler.java:301) at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:315) at net.sf.jasperreports.engine.design.JRJdtCompiler.compileClass(JRJdtCompiler.java:392) at net.sf.jasperreports.engine.design.JRJdtCompiler.compileReport(JRJdtCompiler.java:109) at net.sf.jasperreports.engine.design.JRDefaultCompiler.compileReport(JRDefaultCompiler.java:106) at net.sf.jasperreports.engine.JasperCompileManager.compileReport(JasperCompileManager.java:212) at net.sf.jasperreports.engine.JasperCompileManager.compileReport(JasperCompileManager.java:198) at report.sample.ReportServlet$TemplateCompiler.run(ReportServlet.java:81) at java.lang.Thread.run(Unknown Source) Please help me about this problem?(I think this problem is version or conflict of jdt.jar) Thanks Code:package report.sample;import java.io.BufferedWriter;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.OutputStreamWriter;import java.io.PipedInputStream;import java.io.PipedOutputStream;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.Properties;import java.util.StringTokenizer;import java.util.regex.Matcher;import java.util.regex.Pattern;import javax.naming.InitialContext;import javax.naming.NamingException;import javax.servlet.Servlet;import javax.servlet.ServletConfig;import javax.servlet.ServletContext;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.sql.DataSource;import net.sf.jasperreports.engine.JRException;import net.sf.jasperreports.engine.JRExporterParameter;import net.sf.jasperreports.engine.JasperCompileManager;import net.sf.jasperreports.engine.JasperFillManager;import net.sf.jasperreports.engine.JasperPrint;import net.sf.jasperreports.engine.JasperReport;import net.sf.jasperreports.engine.export.JRHtmlExporter;import net.sf.jasperreports.engine.export.JRHtmlExporterParameter;import org.apache.velocity.Template;import org.apache.velocity.VelocityContext;import org.apache.velocity.app.Velocity;import org.apache.velocity.context.Context;public class ReportServlet extends HttpServlet implements Servlet { private DataSource ds; private Map reportsProps = new HashMap(); // Class for reading the output that is generated // by the Velocity engine; this ouput is sent // to the Jasper XML template compiler private class TemplateCompiler implements Runnable { private PipedInputStream inStream; private JasperReport jasperReport; public TemplateCompiler(PipedInputStream pipedStream) { this.inStream = pipedStream; } /* * This method should be called after the thread that is executing this * Runnable instance has finished. */ public JasperReport getJasperReport() { return jasperReport; } public void run() { try { // If no input stream was provided, return if (inStream == null) { return; } jasperReport = JasperCompileManager.compileReport(inStream); } catch (Exception io) { io.printStackTrace(); //log it } } } public void init(ServletConfig config) throws ServletException { super.init(config); try { ServletContext context = getServletContext(); // Set class path for compiling XML templates System.setProperty("jasper.reports.compile.class.path", context .getRealPath("/WEB-INF/lib/jasperreports-0.6.5.jar") + System.getProperty("path.separator") + context.getRealPath("/WEB-INF/classes/")); // Init velocity initVelocity(config); String files = config.getInitParameter("reports.properties"); StringTokenizer tokens = new StringTokenizer(files, ";"); while (tokens.hasMoreTokens()) { ReportProperties props = new ReportProperties(tokens .nextToken()); reportsProps.put(props.getReportName(), props); } } catch (Exception e) { throw new ServletException("Error initializing ReportServlet!", e); } } private void initVelocity(ServletConfig config) throws Exception { String propsFile = config.getInitParameter("velocity.properties"); Properties props = new Properties(); String path = getServletContext().getRealPath(propsFile); props.load(new FileInputStream(path)); Velocity.init(props); } protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req, resp); } protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { try { // Populate context VelocityContext context = new VelocityContext(); addDataToContext(context, req, resp); // Get template Template template = Velocity.getTemplate("BasicReport.vm"); JasperReport jasperReport = compileTemplate(template, context); // Create JasperPrint object using the fillReport() method in // JasperFillManager class JasperPrint jasperPrint = JasperFillManager.fillReport( jasperReport, getParameters(req), getConnection()); generateHtmlOutput(jasperPrint, req, resp); } catch (Exception e) { req.setAttribute("exception", e); getServletContext().getRequestDispatcher("/jsp/exception.jsp") .forward(req, resp); } } private void addDataToContext(VelocityContext context, HttpServletRequest req, HttpServletResponse resp) { String reportName = req.getParameter("reportName"); ReportProperties props = (ReportProperties) reportsProps .get(reportName); String columns[] = req.getParameterValues("columns"); List columnList = new ArrayList(); List fieldList = new ArrayList(); for (int i = 0; i < columns.length; i++) { String column = columns[i]; Column col = props.getColumn(column); columnList.add(col); String columnExpression = col.getExpression(); // Get fields from selected columns Pattern pattern = Pattern.compile("\\$F\\{[\\d\\w]+\\}"); Matcher matcher = pattern.matcher(columnExpression); while (matcher.find()) { int beginIndex = matcher.start() + 3; int endIndex = matcher.end() - 1; String field = columnExpression.substring(beginIndex, endIndex); Field f = props.getField(field); if (!fieldList.contains(f)) { fieldList.add(f); } } } // add title, fields, columns, sql query, header string to // VelocityContext context.put("title", props.getTitle()); context.put("fieldList", fieldList); context.put("columnList", columnList); context.put("sql", props.getSql()); context.put("headerString", props.getHeader()); } private Map getParameters(HttpServletRequest req) { // get corresponfing properties for report String reportName = req.getParameter("reportName"); ReportProperties props = (ReportProperties) reportsProps .get(reportName); Map parameters = new HashMap(); parameters.put("BaseDir", new File(getServletContext().getRealPath( "/images/"))); parameters.put("ImageFile", props.getImage()); return parameters; } private JasperReport compileTemplate(Template template, Context context) throws Exception { PipedInputStream inStream = null; try { BufferedWriter writer = null; Thread thread = null; TemplateCompiler compiler = null; try { PipedOutputStream outStream = new PipedOutputStream(); writer = new BufferedWriter(new OutputStreamWriter(outStream)); // Connect input stream to output stream inStream = new PipedInputStream(outStream); compiler = new TemplateCompiler(inStream); thread = new Thread(compiler); thread.start(); template.merge(context, writer); } catch (Exception e) { //log it throw e; } finally { if (writer != null) { writer.flush(); writer.close(); } } // Wait for thread to finish executing thread.join(); // Get compiled report return (compiler.getJasperReport()); } finally { // InputStream cannot be closed before thread // is finished executing if (inStream != null) { inStream.close(); } } } private void generateHtmlOutput(JasperPrint jasperPrint, HttpServletRequest req, HttpServletResponse resp) throws IOException, JRException { Map imagesMap = new HashMap(); req.getSession().setAttribute("IMAGES_MAP", imagesMap); JRHtmlExporter exporter = new JRHtmlExporter(); exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint); exporter.setParameter(JRExporterParameter.OUTPUT_WRITER, resp .getWriter()); exporter.setParameter(JRHtmlExporterParameter.IMAGES_MAP, imagesMap); exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, "image?image="); exporter.exportReport(); } private DataSource getDataSource() throws NamingException { if (ds == null) { javax.naming.Context ctx = new InitialContext(); ds = (DataSource) ctx.lookup("jdbc/reportDB"); } return ds; } private Connection getConnection() throws SQLException, NamingException,ClassNotFoundException { //return getDataSource().getConnection(); Class.forName("com.mysql.jdbc.Driver"); Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/reportdb", "root", "123456"); return conn; }}
×
×
  • Create New...