java-无法使用Servlet 3可插入性功能将Jersey 2.16集成到Tomcat 8.0.12中
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-无法使用Servlet 3可插入性功能将Jersey 2.16集成到Tomcat 8.0.12中,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3033字,纯文字阅读大概需要5分钟。
内容图文
![java-无法使用Servlet 3可插入性功能将Jersey 2.16集成到Tomcat 8.0.12中](/upload/InfoBanner/zyjiaocheng/662/4861759ed7d344b3835cf04d61336b9e.jpg)
在新项目中,我决定将最新的Jersey(2.16)与Tomcat 8配合使用,但是文档中描述的集成方案导致Tomcat抛出NPE:
java.lang.NullPointerException
org.apache.catalina.loader.WebappClassLoader.binaryNameToPath(WebappClassLoader.java:2503)
org.apache.catalina.loader.WebappClassLoader.findLoadedClass0(WebappClassLoader.java:2708)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1215)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1173)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:493)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:534)
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1081)
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:658)
org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:277)
org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2381)
org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2370)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
java.lang.Thread.run(Thread.java:744)
这是我的web.xml
<servlet>
<servlet-name>bla.bla.core.jersey.config.JerseyServerConfig</servlet-name>
</servlet>
<servlet-mapping>
<servlet-name>bla.bla.core.jersey.config.JerseyServerConfig</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
以下是JerseyServerConfig的清单:
package ru.huawei.rnd.bulksms.core.jersey.config;
import org.glassfish.jersey.server.ResourceConfig;
import ru.huawei.rnd.bulksms.core.jersey.constants.FILTERS_AND_INTERCEPTORS;
import ru.huawei.rnd.bulksms.core.jersey.constants.JERSEY_FEATURES;
public class JerseyServerConfig extends ResourceConfig {
public JerseyServerConfig() {
register(JERSEY_FEATURES.FORM_PROVIDER);
register(JERSEY_FEATURES.MULTIPART);
register(FILTERS_AND_INTERCEPTORS.USER_GZIP_FILTER);
register(FILTERS_AND_INTERCEPTORS.GZIP_ENCODER);
packages("bla.bla.rest");
}
}
因此,根据“ 4.7.2.2.使用web.xml描述符的部署”中的here描述的方案,它看起来是正确的.但是当我尝试调用任何JAX-RS资源时,Tomcat抛出NPE.似乎是由于web.xml中缺少servlet类元素.
解决方法:
看来您正在使用jersey-container-servlet-core依赖项.当我们声明servlet容器时,这将起作用.但是,当我们想利用自动加载Jersey的功能时,我们需要jersey-container-servlet
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId>
<version>${jersey.version}</version>
</dependency>
该工件具有JerseyServletContainerInitializer,它实现了SerlvetContainerInitializer(对于Servlet 3.x部署).
使用前一种工件进行测试并得到与您相同的结果,并且使用后一种工件可以正常工作.
内容总结
以上是互联网集市为您收集整理的java-无法使用Servlet 3可插入性功能将Jersey 2.16集成到Tomcat 8.0.12中全部内容,希望文章能够帮你解决java-无法使用Servlet 3可插入性功能将Jersey 2.16集成到Tomcat 8.0.12中所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。