泽西岛:不存在 WebApplication 提供程序
Posted
技术标签:
【中文标题】泽西岛:不存在 WebApplication 提供程序【英文标题】:Jersey: No WebApplication provider is present 【发布时间】:2013-06-21 15:10:19 【问题描述】:我遵循http://www.ibm.com/developerworks/library/wa-aj-tomcat/ 中的确切步骤,并且我正确地包含了所有罐子(我相信)。我仍然收到如下错误:
Jun 24, 2013 7:16:21 PM com.sun.jersey.api.core.ScanningResourceConfig init
INFO: No provider classes found.
Jun 24, 2013 7:16:21 PM org.apache.catalina.core.ApplicationContext log
SEVERE: StandardWrapper.Throwable
com.sun.jersey.api.container.ContainerException: No WebApplication provider is present
at com.sun.jersey.spi.container.WebApplicationFactory.createWebApplication(WebApplicationFactory.java:69)
at com.sun.jersey.spi.container.servlet.ServletContainer.create(ServletContainer.java:360)
at com.sun.jersey.spi.container.servlet.ServletContainer$InternalWebComponent.create(ServletContainer.java:275)
at com.sun.jersey.spi.container.servlet.WebComponent.load(WebComponent.java:585)
at com.sun.jersey.spi.container.servlet.WebComponent.init(WebComponent.java:213)
at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:342)
at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:516)
at javax.servlet.GenericServlet.init(GenericServlet.java:160)
at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1280)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1193)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1088)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5123)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5407)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Jun 24, 2013 7:16:21 PM org.apache.catalina.core.StandardContext loadOnStartup
SEVERE: Servlet /Jersey threw load() exception
com.sun.jersey.api.container.ContainerException: No WebApplication provider is present
at com.sun.jersey.spi.container.WebApplicationFactory.createWebApplication(WebApplicationFactory.java:69)
at com.sun.jersey.spi.container.servlet.ServletContainer.create(ServletContainer.java:360)
at com.sun.jersey.spi.container.servlet.ServletContainer$InternalWebComponent.create(ServletContainer.java:275)
at com.sun.jersey.spi.container.servlet.WebComponent.load(WebComponent.java:585)
at com.sun.jersey.spi.container.servlet.WebComponent.init(WebComponent.java:213)
at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:342)
at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:516)
at javax.servlet.GenericServlet.init(GenericServlet.java:160)
at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1280)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1193)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1088)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5123)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5407)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
我刚刚做了第一步,请示你好。我的 web.xml 和 java 文件如下:
package sample.hello.resources;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Path("/hello")
public class HelloResource
@GET
@Produces(MediaType.TEXT_PLAIN)
public String sayHello()
return "Hello Jersey";
web.xml
<?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" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>Jersey</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>Jersey REST Service</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>sample.hello.resources</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey REST Service</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
</web-app>
我已经在谷歌上搜索了一段时间,我找不到一个好的解决方案。 顺便说一句,我的 jar 文件列表是: 激活.jar asm-3.1.jar com.sun.jersey.jersey-server-1.4.0.jar jaxb-api-2.2.5.jar jaxb-impl-2.2_1.jar jersey-client.jar jersey-core.jar jersey-json-1.7.jar jersey-spring-1.11-b02.jar jsr311-api.1.1.1.jar stax-api.jar wstx-asl.jar
这些罐子推荐在网络上。我将它们直接复制到 WEB-INF/lib 文件夹中。我担心的一件事是路径问题,有人告诉我之前我应该通过右键单击类项目->构建路径来添加一些 jars,然后添加 jars。我也试过了,不是好消息。我正在运行Tomcat7.0。网络也运行到错误报告页面。请帮助!
我尝试了两个本地主机链接:8080/Jersey/WEB-INF/web.xml & 8080/Jersey/rest/hello。都失败了!
提前致谢。
【问题讨论】:
【参考方案1】:我怀疑这可能与 *** 上的另一个问题重复。 Jersey No WebApplication provider is present when jersey-json dependency added
最后,确保 jersey-server 依赖于你的类路径。 当您说“您的 jar 文件列表”时,您确定这些 jar 文件在 Web 应用程序的类路径中吗?这可能是您的 IDE 构建路径的一个函数导致了您的问题。
如果您仍有问题,请提供您使用的 IDE,以及您的类路径的配置方式。
【讨论】:
好吧,我想通了,这是库的问题,请确保库 jar 与相同的版本匹配。感谢您的帮助。【参考方案2】:我在 2 个不同的 poms 中有 2 个不同的 Jersey 版本,一个依赖于另一个。解决此问题即可解决问题。
【讨论】:
【参考方案3】:通过在 POM 中添加所有 jersy 模块的相同版本来解决此问题。最初我遇到了这个问题,因为在我给核心的 POM 中有 1.19.3 和 Servlet 作为 19.3。后来将所有必需的 jersy jar 更改为相同的版本 1.19 解决了这个问题。
【讨论】:
【参考方案4】:所有 JERSEY jar 必须包含相同的版本。 这是一个例子:
jersey-server-1.17.1.jar
jersey-json-1.17.1.jar
jersey-core-1.17.1.jar
jersey-client-1.17.1.jar
jersey-servlet-1.17.1.jar
【讨论】:
以上是关于泽西岛:不存在 WebApplication 提供程序的主要内容,如果未能解决你的问题,请参考以下文章
AsyncResponse ConnectionCallback 不会在泽西岛触发