Hi all!
I'm receiving a mysterious error when I try to run my web ap. "Wrapper cannot find servlet class com.ruffalocody.report.ReportServlet or a class it depends on"
I'm running it on JBoss 3.2.7, and I have another web ap, made almost identical to this one which does not display the same error/exception.
If anyone could give me advice on what I should do to fix this, I'd very much appreciate it. :)
Full exception message:
javax.servlet.ServletException: Wrapper cannot find servlet class com.ruffalocody.report.ReportServlet or a class it depends on
org.jboss.web.tomcat.security.CustomPrincipalValve.invoke(CustomPrincipalValve.java:66)
org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:162)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:535)
org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
java.lang.Thread.run(Thread.java:534)
root cause
java.lang.ClassNotFoundException: com.ruffalocody.report.ReportServlet
java.net.URLClassLoader$1.run(URLClassLoader.java:199)
java.security.AccessController.doPrivileged(Native Method)
java.net.URLClassLoader.findClass(URLClassLoader.java:187)
java.lang.ClassLoader.loadClass(ClassLoader.java:289)
java.lang.ClassLoader.loadClass(ClassLoader.java:235)
org.jboss.web.tomcat.security.CustomPrincipalValve.invoke(CustomPrincipalValve.java:66)
org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:162)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:535)
org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
java.lang.Thread.run(Thread.java:534)
the servlet class file ReportServlet.class is located in:
WEB-INF\classes\com\ruffalocody\report
web.xml file:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<servlet-name>RprtSrvlt</servlet-name>
<servlet-class>com.ruffalocody.report.ReportServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>RprtSrvlt</servlet-name>
<url-pattern>/reports</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>
index.jsp
</welcome-file>
</welcome-file-list>
<!-- Context Param -->
<context-param>
<param-name>crystal_image_uri</param-name>
<param-value>crystalreportviewers10</param-value>
</context-param>
<!-- Context Param End -->
</web-app>
It's called from the index.jsp page w/ ulr: "reports?goTo=view"
Servlet code (not sure if it's useful, but including just in case):
/*
* ReportServlet.java
*
* Created on February 1, 2007, 11:04 AM
*/
package com.ruffalocody.report;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import com.crystaldecisions.reports.reportengineinterface.JPEReportSourceFactory;
import com.crystaldecisions.sdk.occa.report.reportsource.IReportSourceFactory2;
import com.crystaldecisions.sdk.occa.report.reportsource.IReportSource;
import com.crystaldecisions.report.web.viewer.CrystalReportViewer;
import com.crystaldecisions.sdk.occa.report.lib.ReportSDKExceptionBase;
/**
*
* @author aerohner
* @version
*/
public class ReportServlet extends HttpServlet
{
String rptLoc = "CR10_JRC_BeginHere.rpt";
/** Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
* @param request servlet request
* @param response servlet response
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
response.setContentType("text/html;charset=UTF-8");
String goTo = request.getParameter("goTo");
if(goTo != null && goTo.equals("view"))
{
viewReport(request, response);
}// end goTo view
else if(goTo != null && goTo.equals("export"))
{
exportReport(request, response);
}// end go to export
else
{
RequestDispatcher view = request.getRequestDispatcher("index.jsp");
view.forward(request,response);
}
}
private void viewReport(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException
{
IReportSource rptSrc = setUpReportSource(request);
if (rptSrc != null)
{
// create viewer
CrystalReportViewer viewer = new CrystalReportViewer();
try
{
viewer.setReportSource(rptSrc);
forward(request, response, viewer);
}
catch(ReportSDKExceptionBase e)
{
e.printStackTrace();
}
}// if rptsrc not null
else
{
log("rptSrc is null");
}// end else not null
}// end viewReport(.)
private void exportReport(HttpServletRequest request, HttpServletResponse response)
{
}// end exportReport(.)
private IReportSource setUpReportSource(HttpServletRequest request)
{
IReportSourceFactory2 rptFact = new JPEReportSourceFactory();
IReportSource rptSrc = null;
try
{
rptSrc = (IReportSource)
rptFact.createReportSource(rptLoc, request.getLocale());
}// end try
catch (Exception e)
{}
return rptSrc;
}// end setUpReportSource()
private void forward(HttpServletRequest request,
HttpServletResponse response, Object viewer)
throws ServletException, IOException
{
request.setAttribute("viewer", viewer);
RequestDispatcher view = request.getRequestDispatcher("viewer.jsp");
view.forward(request,response);
}// end forward(...)
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/** Handles the HTTP <code>GET</code> method.
* @param request servlet request
* @param response servlet response
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
processRequest(request, response);
}
/** Handles the HTTP <code>POST</code> method.
* @param request servlet request
* @param response servlet response
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
processRequest(request, response);
}
/** Returns a short description of the servlet.
*/
public String getServletInfo()
{
return "Short description";
}
// </editor-fold>
}
Thanks :)