Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
试图在Tomcat7中使用Jersey(JAX-RS)和Weld(CDI)。获取javax.annotation.ManagedBean的noClassDefFoundError_Java_Tomcat_Jersey_Cdi_Jboss Weld - Fatal编程技术网

试图在Tomcat7中使用Jersey(JAX-RS)和Weld(CDI)。获取javax.annotation.ManagedBean的noClassDefFoundError

试图在Tomcat7中使用Jersey(JAX-RS)和Weld(CDI)。获取javax.annotation.ManagedBean的noClassDefFoundError,java,tomcat,jersey,cdi,jboss-weld,Java,Tomcat,Jersey,Cdi,Jboss Weld,我试图让Weld在Tomcat 7.0.34上与Jersey一起工作,但似乎遇到了这个问题。实际的例外是 java.lang.NoClassDefFoundError: javax/annotation/ManagedBean 但我并没有用@ManagedBean注释显式地注释任何东西,所以我猜Weld隐式地做到了这一点。该注释是由Weld提供的,还是缺少其他依赖项 我的pom.xml文件包含: org.jboss.weld.servlet 焊接servlet ${weld.version}

我试图让Weld在Tomcat 7.0.34上与Jersey一起工作,但似乎遇到了这个问题。实际的例外是

java.lang.NoClassDefFoundError: javax/annotation/ManagedBean
但我并没有用@ManagedBean注释显式地注释任何东西,所以我猜Weld隐式地做到了这一点。该注释是由Weld提供的,还是缺少其他依赖项

我的pom.xml文件包含:


org.jboss.weld.servlet
焊接servlet
${weld.version}
我是否遗漏了什么,或者尝试使用Weld和Jersey是否存在更大的问题


catalina.out在部署我的web应用程序时:

...
Jan 03, 2013 2:21:21 AM org.apache.catalina.startup.HostConfig deployWAR
INFO: Deploying web application archive /usr/local/Cellar/tomcat/7.0.34/libexec/webapps/tracker.war
Jan 03, 2013 2:21:22 AM org.jboss.weld.bootstrap.WeldBootstrap <clinit>
INFO: WELD-000900 1.1.10 (Final)
Jan 03, 2013 2:21:22 AM org.jboss.weld.bootstrap.WeldBootstrap startContainer
INFO: WELD-000101 Transactional services not available. Injection of @Inject UserTransaction not available. Transactional observers will be invoked synchronously.
Jan 03, 2013 2:21:22 AM org.jboss.weld.environment.tomcat7.Tomcat7Container initialize
INFO: Tomcat 7 detected, CDI injection will be available in Servlets and Filters. Injection into Listeners is not supported
Jan 03, 2013 2:21:22 AM org.jboss.weld.interceptor.util.InterceptionTypeRegistry <clinit>
WARNING: Class 'javax.ejb.PostActivate' not found, interception based on it is not enabled
Jan 03, 2013 2:21:22 AM org.jboss.weld.interceptor.util.InterceptionTypeRegistry <clinit>
WARNING: Class 'javax.ejb.PrePassivate' not found, interception based on it is not enabled
Jan 03, 2013 2:21:22 AM com.sun.jersey.api.core.PackagesResourceConfig init
INFO: Scanning for root resource and provider classes in the packages:
...
Jan 03, 2013 2:21:22 AM com.sun.jersey.server.impl.cdi.CDIComponentProviderFactoryInitializer initialize
INFO: CDI support is enabled
Jan 03, 2013 2:21:22 AM com.sun.jersey.server.impl.application.WebApplicationImpl _initiate
INFO: Initiating Jersey application, version 'Jersey: 1.16 11/28/2012 02:09 PM'
servlet使用500 HTTP状态代码响应请求。根本原因堆栈跟踪:

java.lang.NoClassDefFoundError: javax/annotation/ManagedBean
com.sun.jersey.server.impl.cdi.CDIComponentProviderFactory.getComponentProvider(CDIComponentProviderFactory.java:116)
com.sun.jersey.server.impl.cdi.CDIComponentProviderFactory.getComponentProvider(CDIComponentProviderFactory.java:103)
com.sun.jersey.core.spi.component.ioc.IoCProviderFactory._getComponentProvider(IoCProviderFactory.java:89)
com.sun.jersey.core.spi.component.ProviderFactory.getComponentProvider(ProviderFactory.java:153)
com.sun.jersey.core.spi.component.ProviderServices.getComponent(ProviderServices.java:251)
com.sun.jersey.core.spi.component.ProviderServices.getProviders(ProviderServices.java:148)
com.sun.jersey.server.impl.application.ExceptionMapperFactory.init(ExceptionMapperFactory.java:74)
com.sun.jersey.server.impl.application.WebApplicationImpl._initiate(WebApplicationImpl.java:1307)
com.sun.jersey.server.impl.application.WebApplicationImpl.access$700(WebApplicationImpl.java:168)
com.sun.jersey.server.impl.application.WebApplicationImpl$13.f(WebApplicationImpl.java:774)
com.sun.jersey.server.impl.application.WebApplicationImpl$13.f(WebApplicationImpl.java:770)
com.sun.jersey.spi.inject.Errors.processWithErrors(Errors.java:193)
com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:770)
com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:765)
com.sun.jersey.spi.container.servlet.ServletContainer.initiate(ServletContainer.java:489)
com.sun.jersey.spi.container.servlet.ServletContainer$InternalWebComponent.initiate(ServletContainer.java:319)
com.sun.jersey.spi.container.servlet.WebComponent.load(WebComponent.java:609)
com.sun.jersey.spi.container.servlet.WebComponent.init(WebComponent.java:210)
com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:374)
com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:557)
javax.servlet.GenericServlet.init(GenericServlet.java:160)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
java.lang.Thread.run(Thread.java:722)

奇怪的是,catalina.out中没有显示堆栈跟踪,相反,日志文件显示了重新部署的应用程序的外观

我遇到了完全相同的问题,我通过删除当前版本的jersey(1.16)和使用旧版本的jersey(1.8)解决了这个问题。在使用旧版本后,我不再有此错误。

我遇到了相同的问题,因为我覆盖了ServletContainer,如下所述:


为了能够运行它,我用@RequestScope注释了jersey服务类,然后注入工作了。

只需查看jersey jar内部(我使用jersey 1.14),特别是pom文件。 您将看到,它需要一些提供的依赖项,其中之一是javax.ejb 3.1:

<dependency>
    <groupId>org.glassfish</groupId>
    <artifactId>javax.ejb</artifactId>
    <version>3.1</version>
    <scope>provided</scope>
</dependency>

玻璃鱼
javax.ejb
3.1
假如
这个jar包含必要的类:javax.annotation.ManagedBean。如果您导入任何包含该类的其他jar,则该类将无法工作。这是因为球衣罐子的捆绑方式,但那是另一回事

只要在pom中添加此依赖项,一切都会正常工作


Nicu

我在原始帖子中添加了更多信息。这是造成问题的原因,还是日志中的某些内容?我不知道。我想知道是否还有更多的问题,这是一种症状。是的,这肯定是造成问题的原因,我不能使用CDI/@Inject,因为我遇到了上面提到的异常。我应该尝试切换到另一个容器,比如glassfish,看看它是否在提供的API中发生。如果您想继续使用tomcat,也可以尝试使用TomEE。我尝试切换到TomEE,但这本身就带来了一些问题。那似乎也不喜欢泽西。我可以试试玻璃鱼。谢谢你的建议。回到1.11可以阻止这个错误的发生,但是DI仍然不起作用(对象是空的)。我可能还应该说,我对这个异常似乎“修复”了这个问题并不感到兴奋。我宁愿理解原因,也不愿简单地放弃几个版本。你有没有发现到底是什么原因造成的?更好的是,你是在使用tomcat+weld+jersey还是其他堆栈?@Steven Bakhtiari是的,我在使用tomcat 7和weld。我也不认为1.8和1.16之间有重大区别。我宁愿使用稍微旧一点的版本,也不愿花一整天的时间来尝试让混音一起工作。
<dependency>
    <groupId>org.glassfish</groupId>
    <artifactId>javax.ejb</artifactId>
    <version>3.1</version>
    <scope>provided</scope>
</dependency>