Trying to upgrade to corretto-Java17, Tomcat 10.1.16/10.1.17 . I have moved all javax package to jakarta package, upgraded spring to version6 and cxf to version-4.When I deployed my application in tomcat, I see below error as:
jakarta.servlet.ServletException: At least one resource class should be specified
at org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet.getServiceClasses(CXFNonSpringJaxrsServlet.java:304) at org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet.init(CXFNonSpringJaxrsServlet.java:153) at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:944) at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:901) at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:805) at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4601) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4894)*
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee
https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
version="5.0">
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:papi-
plugin.xml,classpath*:papi-
server.xml,classpath*:applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener- class>
</listener>
<servlet>
<servlet-name>CXFServlet</servlet-name>
<servlet-class>
org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet
</servlet- class>
<init-param>
<param-name>
jakarta.ws.rs.core.Application</param-name>
<param-value>
com.resource.ProvisionCxfApp</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/prv/v1/*</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>abc</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet</servlet-
class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>abc</servlet-name>
<url-pattern>/servlet/*</url-pattern>
</servlet-mapping>
</web-app>
My ProvisionCxfApp:
import jakarta.servlet.ServletException;
import jakarta.ws.rs.core.Application;
public class ProvisionCxfApp extends Application {
private final Set<Object> singletons = new HashSet<Object>();
/**
* @return
* @see jakarta.ws.rs.core.Application#getClasses()
*/
@Override
public Set<Class<?>> getClasses() {
Set<Class<?>> set = new HashSet<Class<?>>();
set.add(AResource.class);
set.add(AcsResource.class);
return set;
}
public ProvisionCxfApp() throws ServletException{
singletons.add(AResource.class);
singletons.add(AcsResource.class);
}}
Also have classes like :
@Path("/ac/{id}")
public class AResource extends BResource {}
@Path("/acs")
public class AcsResource extends BResource {}
changed this to : jakarta.ws.rs.Application. Since CXFNonSpringJaxrsServlet - jar using "jakarta.ws.rs.Application" as its param. So issue got resolved !!!