Erro em uma aplicação web no Jboss: javax.servlet.ServletException: Wrapper cannot find servlet

A seguinte página de erro ocorre durante a execuçã de uma aplicação web no jboss:

HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: Wrapper cannot find servlet class XXXServlet or a class it depends on
	org.jboss.web.tomcat.security.CustomPrincipalValve.invoke(CustomPrincipalValve.java:81)
	org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:177)
	org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
	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:619)

root cause

java.lang.ClassNotFoundException: XXXServlet
	java.net.URLClassLoader$1.run(URLClassLoader.java:200)
	java.security.AccessController.doPrivileged(Native Method)
	java.net.URLClassLoader.findClass(URLClassLoader.java:188)
	java.lang.ClassLoader.loadClass(ClassLoader.java:307)
	java.lang.ClassLoader.loadClass(ClassLoader.java:252)
	org.jboss.web.tomcat.security.CustomPrincipalValve.invoke(CustomPrincipalValve.java:81)
	org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:177)
	org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
	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:619)

note The full stack trace of the root cause is available in the Apache Tomcat/5.0.30 logs.
Apache Tomcat/5.0.30

Acho que tem algo haver com o descritor web.xml.

Conteúdo do web.xml:

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
    "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">

<web-app>
	<servlet>
		<servlet-name>XXXServlet</servlet-name>
		<servlet-class>XXXServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>XXXServlet</servlet-name>
		<url-pattern>/XXXServlet</url-pattern>
	</servlet-mapping>
	<welcome-file-list>
		<welcome-file>principal.jsp</welcome-file>
	</welcome-file-list>

	<resource-ref>
		...
	</resource-ref>

	<session-config>
		<session-timeout>30</session-timeout>
	</session-config>

</web-app>

E para garantir que o XXXServlet.class está no local correto, a seguir é exibida parte da saída do comando
jar -tf <folder-jboss_deploy>/.war

~$ jar -tf <folder-jboss_deploy>/xxx.war
...
META-INF/ejb-jar.xml                                                                  
META-INF/jboss.xml                                                                    
WEB-INF/classes/XXXServlet.class                                                      
WEB-INF/classes/com/jspsmart/upload/File.class                                        
WEB-INF/classes/com/jspsmart/upload/File.class.hacked                                 
WEB-INF/classes/com/jspsmart/upload/File.class.original                               
WEB-INF/classes/com/jspsmart/upload/Files.class
...

Alguém poderia me ajudar nesse impasse?

Desde já, obrigado!