我刚刚在MyEclipse中为我的项目添加了JAX-RS Web服务,并将我的导出/部署到jboss 6 / jdk 1.6,但我一直收到这个错误,我不知道它为什么会出现。以下是此堆栈跟踪的前几行:
2011-05-03 21:33:46,716 INFO [org.jboss.resteasy.integration.deployers.ResteasyIntegrationDeployer] (HDScanner) *** Adding JAX-RS resource classes: com.mycompany.CategoriesResource
2011-05-03 21:33:47,180 INFO [org.jboss.web.tomcat.service.deployers.TomcatDeployment] (HDScanner) deploy, ctxPath=/mypath
2011-05-03 21:33:47,330 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[/mypath]] (HDScanner) Exception sending context initialized event to listener instance of class org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap: java.lang.RuntimeException: Unable to scan WEB-INF for JAX-RS annotations, you must manually register your classes/resources
之前有没有人遇到过这个问题?该项目是在MyEclipse中使用Struts和Web服务功能创建的,如果有帮助的话。老实说,我不知道还有什么可以尝试,因为我最近刚刚部署了类似的配置而没有任何问题。
谢谢!
这是我的web.xml
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd“> 行动 org.apache.struts.action.ActionServlet 配置 /WEB-INF/struts-config.xml 调试 3 详情 3 0
<listener>
<listener-class>org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap</listener-class>
</listener>
<servlet>
<display-name>API</display-name>
<servlet-name>API</servlet-name>
<servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>API</servlet-name>
<url-pattern>/api/*</url-pattern>
</servlet-mapping>
<context-param>
<param-name>resteasy.scan</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>resteasy.servlet.mapping.prefix</param-name>
<param-value>/api</param-value>
</context-param>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<jsp-config>
<taglib>
<taglib-uri>http://struts.apache.org/tags-bean</taglib-uri>
<taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://struts.apache.org/tags-html</taglib-uri>
<taglib-location>/WEB-INF/struts-html.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://struts.apache.org/tags-logic</taglib-uri>
<taglib-location>/WEB-INF/struts-logic.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://struts.apache.org/tags-tiles</taglib-uri>
<taglib-location>/WEB-INF/struts-tiles.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://struts.apache.org/tags-nested</taglib-uri>
<taglib-location>/WEB-INF/struts-nested.tld</taglib-location>
</taglib>
</jsp-config>
答案 0 :(得分:1)
这意味着RESTEasy在尝试扫描WEB-INF目录时收到IOException
。我要检查的第一件事是你的文件系统权限 - 运行JBoss进程的用户可以读取WEB-INF及其中的所有文件吗?
编辑:
回复您的评论:您的类路径包含Scannotation无法理解的条目。它看起来像jndi://
。你能检查一下类路径并找出这个条目是什么吗?
答案 1 :(得分:1)
Resteasy也应该成为受害者。问题出在scannotation-1.0.3.jar。
DirectoryIteratorFactory factory = registry.get(url.getProtocol());
if (factory == null) throw new IOException("Unable to scan directory of protocol: " + url.getProtocol());
return factory.create(url, filter);
似乎当url.getProtocol()返回“jdni”时,会出现此问题。我还在调查url会将协议作为jndi返回。
我从lib文件夹中删除了scannotation-1.0.3.jar,并下载了源代码,打印了坏URL。原来是:jndi:/localhost/Enoch2/WEB-INF/lib/.svn /
然后我尝试从部署中删除所有.svn文件夹。有用。
find . -name .svn | xargs rm -Rf
答案 2 :(得分:0)
当我将我的maven项目从java 6移动到java 8时,我遇到了同样的问题。原因是我的项目有些依赖于javassit 3.12并且它与java 8不兼容。我将javassist升级到3.20后它开始工作正常。 因此,如果您遇到此问题,请检查所使用的javassist jar并根据需要进行升级。
答案 3 :(得分:0)
我最近遇到了这个问题。
Java 8更改不支持 javassist 版本。因此,我已将该jar从该依赖项中排除,并在外部添加了javassist依赖项(具有更高版本)。
LOG:
SEVERE: Exception sending context initialized event to listener instance of class [org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap]
java.lang.RuntimeException: Unable to scan WEB-INF for JAX-RS annotations, you must manually register your classes/resources
at org.jboss.resteasy.plugins.server.servlet.ConfigurationBootstrap.createDeployment(ConfigurationBootstrap.java:177)
at org.jboss.resteasy.plugins.server.servlet.ListenerBootstrap.createDeployment(ListenerBootstrap.java:32)
at org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap.contextInitialized(ResteasyBootstrap.java:27)
我的解决方案:
更新了我的pom.xml文件
<dependency>
<groupId>com.xyz</groupId>
<artifactId>abc</artifactId>
<version>${abc.version}</version>
<exclusions>
<exclusion>
<groupId>javassist</groupId>
<artifactId>javassist</artifactId>
</exclusion>
</exclusions>
</dependency>
并增加了依赖性
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.18.2-GA</version>
</dependency>