当前位置:首页 > 开发 > 编程语言 > 编程 > 正文

jersey使用过程中遇到的问题

发表于: 2013-06-07   作者:dove19900520   来源:转载   浏览次数:
摘要: 在使用jersey框架搭建服务时,经常会报出如下异常: com.sun.jersey.api.container.ContainerException: The ResourceConfig instance does not contain any root resource classes. at com.sun.jersey.server.impl.application.RootRe

在使用jersey框架搭建服务时,经常会报出如下异常:

com.sun.jersey.api.container.ContainerException: The ResourceConfig instance does not contain any root resource classes.
	at com.sun.jersey.server.impl.application.RootResourceUriRules.<init>(RootResourceUriRules.java:99)
	at com.sun.jersey.server.impl.application.WebApplicationImpl._initiate(WebApplicationImpl.java:1331)
	at com.sun.jersey.server.impl.application.WebApplicationImpl.access$700(WebApplicationImpl.java:168)
	at com.sun.jersey.server.impl.application.WebApplicationImpl$13.f(WebApplicationImpl.java:774)
	at com.sun.jersey.server.impl.application.WebApplicationImpl$13.f(WebApplicationImpl.java:770)
	at com.sun.jersey.spi.inject.Errors.processWithErrors(Errors.java:193)
	at com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:770)
	at com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:765)
	at com.sun.jersey.spi.container.servlet.ServletContainer.initiate(ServletContainer.java:489)
	at com.sun.jersey.spi.container.servlet.ServletContainer$InternalWebComponent.initiate(ServletContainer.java:319)
	at com.sun.jersey.spi.container.servlet.WebComponent.load(WebComponent.java:605)
	at com.sun.jersey.spi.container.servlet.WebComponent.init(WebComponent.java:210)
	at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:374)
	at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:557)
	at javax.servlet.GenericServlet.init(GenericServlet.java:212)
	at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1206)
	at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1026)
	at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4421)
	at org.apache.catalina.core.StandardContext.start(StandardContext.java:4734)
	at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:799)
	at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:779)
	at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:601)
	at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1079)
	at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:1002)
	at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:506)
	at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1317)
	at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:324)
	at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:142)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1065)
	at org.apache.catalina.core.StandardHost.start(StandardHost.java:840)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057)
	at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)
	at org.apache.catalina.core.StandardService.start(StandardService.java:525)
	at org.apache.catalina.core.StandardServer.start(StandardServer.java:754)
	at org.apache.catalina.startup.Catalina.start(Catalina.java:595)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)

 下面是出现这种异常的几种情况

1、在不与spring整合,而是直接使用jersey搭建服务时,如果只在web.xml 中配置了如下代码:

<servlet>
  <servlet-name>abc</servlet-name>
   <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
   <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
  <servlet-name>abc</servlet-name>
  <url-pattern>/services/*</url-pattern>
  </servlet-mapping>

 

此时启动tomcat,会报出上面的异常,原因是实例张不包含任何启动资源的类,你要确保实例已经创建,例如:

@Path("abc")
@Produces("application/xml")
@Consumes("application/xml")
public class Abc
{
	@POST
	@Produces("application/xml")
	@Consumes("application/xml")
	public void abc(){
		
	}
	
}

 这样再启动,就可以了。

2、在与spring整合中时,如果出现如上异常,原因可能是:

1)缺少spring-jersey.jar包

将spring-jersey.jar包添加到工程lib下,然后修改下web.xml配置文件

<servlet>
  <servlet-name>abc</servlet-name>
   <servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class>
   <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
  <servlet-name>abc</servlet-name>
  <url-pattern>/services/*</url-pattern>
  </servlet-mapping> 

然后再重新启动tomcat,就可以了。

2)如果按照1)操作完成后,tomcat启动仍然报上面的异常,此时需要在web.xml中在重新添加点配置信息(红色部分):

<servlet>
  <servlet-name>abc</servlet-name>
  <servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class>
  <init-param>
  <param-name>com.sun.jersey.config.property.packages</param-name>
   <param-value>com.xxyd.map.webservice</param-value><!--代表的是你服务端的路径,要和你的工程服务器端路径保持一致-->
  </init-param>
  <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
  <servlet-name>abc</servlet-name>
  <url-pattern>/services/*</url-pattern>
  </servlet-mapping>

 此时再启动tomcat就可以了。

 

当然,还有一种方式就是重新将“com.sun.jersey.spi.spring.container.servlet.SpringServlet”替换回“com.sun.jersey.spi.spring.container.servlet.SpringServlet”,但如果是这样的话,就失去了spring与jersey整合的意义了,不提倡如此解决。

 

这些是我最近在做项目时遇到的问题,总结一些,供以后学习使用。

但有一点让我很奇怪,百思不得其解的是,在很久之前,我用1)中的配置方式可以正常启动tomcat,但最近写的一些项目中,居然失败了,必须改用2)中的方式,之前用的是jersey-spring-1.5.jar,最近用的是jersey-spring-1.1.7.jar,不知道是不是jar包版本的问题,希望了解或知道原因的朋友给指点迷津,谢谢。

jersey使用过程中遇到的问题

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
这种情况,起初以为是pool的配置不对,但是在调大了各种相应配置之后这样的问题还是经常出现,在查
遇到curl/curl.h没有规则编译之类的问题(具体的忘了) 把usr/include中的curl文件夹拷贝到usr/loca
解决方案如果: 一、web.xml <servlet> <servlet-name>Jersey Web Application</ser
同样是Maven构建的项目,不解释。 项目目录结构: pom.xml <project xmlns="http://maven.apache
总结:先后遇到libz库文件没有正确的链接和pcre库文件没有正确的链接 1./configure后提示需要zlib 2.
1、源代码中类的关系: 类AA从Ext.Panel中继承 类BB从AA中继承 类CC从BB中继承 2、问题描述 a、第一
安装apache中遇到 的问题 ·首先下载一个apache的安装文件,按照步骤next ·在“Network Domain(e.g.s
1,启动tomcat 时提示No Spring WebApplicationInitializer types detected on classpath 解决方法 1
1,启动tomcat 时提示No Spring WebApplicationInitializer types detected on classpath 解决方法 1
1,启动tomcat 时提示No Spring WebApplicationInitializer types detected on classpath 解决方法 1
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号