JBoss RESTEasy无法扫描WEB-INF以获取JAX-RS注释

问题描述 投票:1回答:4

我刚刚在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“> action org.apache.struts.action.ActionServlet config /WEB-INF/struts-config.xml debug 3 detail 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>

java rest jboss jax-rs resteasy
4个回答
1
投票

这意味着RESTEasy在尝试扫描WEB-INF目录时收到了IOException。我要检查的第一件事是你的文件系统权限 - 运行JBoss进程的用户可以读取WEB-INF及其中的所有文件吗?

编辑:

回复您的评论:您的类路径包含Scannotation不理解的条目。它看起来像jndi://。你能检查一下类路径并找出这个条目是什么吗?


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


0
投票

当我将我的maven项目从java 6移动到java 8时,我遇到了同样的问题。原因是我的项目中的一些依赖性持有javassit 3.12并且它与java 8不兼容。在我将javassist升级到3.20之后它开始工作了精细。因此,如果您遇到此问题,请检查所使用的javassist jar并根据需要进行升级。


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>
© www.soinside.com 2019 - 2024. All rights reserved.