404从Tomcat7/Jersey 2.25/Servlet 2.5升级到Tomcat 10/Jersey 3.0.8



我有一个在Tomcat上运行的Jersey应用程序,我们已经使用了好几年了。我们目前正在升级到Java 11和Tomcat 10,这需要Servlet 5.0和Jersey 3.0.8

在满足所有的编译需要和"的任何运行时错误之后;类未找到";,我遇到了一个问题,我整天都在头疼。无论我尝试什么,我都会得到404错误。

我尝试从ResourceConfig:更改原始应用程序

public class AppConfig extends ResourceConfig {
public AppConfig() {
packages("com.carpart.webservices.rest.oauth");
property(JspMvcFeature.TEMPLATE_BASE_PATH, "/");
register(JspMvcFeature.class);
}
}

到应用程序的子类,重写getClasses:

public class AppConfig extends Application {

@Override
public Set<Class<?>> getClasses() {
Set<Class<?>> s = new HashSet<Class<?>>();
s.add( Connect.class );
return s;
}

}

我尝试了不同的web.xml变体,从最初的过滤器到Jersey文档中的措辞:

原件:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<filter>
<filter-name>Jersey</filter-name>
<filter-class>org.glassfish.jersey.servlet.ServletContainer</filter-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>com.carpart.webservices.rest.oauth.AppConfig</param-value>
</init-param>
</filter>
<filter-mapping>
<url-pattern>/*</url-pattern>
<filter-name>Jersey</filter-name>
</filter-mapping>
</web-app>

新增:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="5.0"
xmlns="https://jakarta.ee/xml/ns/jakartaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<servlet>
<servlet-name>com.carpart.webservices.rest.oauth.AppConfig</servlet-name>
</servlet>

<servlet-mapping>
<servlet-name>com.carpart.webservices.rest.oauth.AppConfig</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>

</web-app>

我已经尝试将应用程序上的@ApplicationPath设置为各种值/"至"/*"至"/api";只是想看看我是否能得到一些不同的反应。

Connect类的定义如下:

@Path("/connect")
public class Connect {
@GET
@Path("/authorize")
@Produces(MediaType.TEXT_HTML)
public Response authorize(@QueryParam("client_id") String client_app_id ) {
log.debug("Inside authorize (phase 1) GET method...");
}
}

Connect资源类没有更改。我们所拥有的。

关于配置和部署,我已经阅读了几次Jersey 3.0.8文档,但我没有发现哪里出了问题。

<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>com.carpart.webservices.rest.oauth.AppConfig</param-value>
</init-param>

如果您使用的是Jersey 3,则javax需要更改为jakarta。再也没有Javax了。

好的,所以我发现了问题!(谢谢你,保罗,你在代码下面的评论帮助引发了我今天早上的想法!(

我仍然将javax.*路径类包含在我的Connect类中,用于注释。我删除了它们,并将它们全部重新导入为jakarta.ws.rs.*,它将Connect类识别为资源。

最新更新