使用 RESTeasy 和 JBoss 的外部 @EJB 注入返回 null
Posted
技术标签:
【中文标题】使用 RESTeasy 和 JBoss 的外部 @EJB 注入返回 null【英文标题】:External @EJB injection return null with RESTeasy and JBoss 【发布时间】:2013-03-08 02:02:15 【问题描述】:我正在使用 RESTeasy 在 JBoss 6 Final 上开发一个 RESTful Web 服务。 我有一个外部 EJB,我想在 Web 服务上注入 EJB。
这是EJB的代码
BeanLocalInterface.java
@Local
public interface BeanLocalInterface
public String sayHello();
Bean.java
@Stateless
@LocalBinding(jndiBinding = "BeanLocal")
public class Bean implements BeanLocalInterface
@Override
public String sayHello()
return "Hello!";
在另一个项目中我有一个 WS:
@Path("/ws")
public class HelloWorldResource
@EJB(mappedName="BeanLocal")
private BeanLocalInterface bean;
@GET
@Path("/hello")
@Produces(MediaType.TEXT_PLAIN)
public String sayHello()
return bean.sayHello();
MyRESTApplication.java
public class MyRESTApplication extends Application
private Set<Object> singletons = new HashSet<Object>();
private Set<Class<?>> empty = new HashSet<Class<?>>();
public MyRESTApplication()
singletons.add(new HelloWorldResource());
@Override
public Set<Class<?>> getClasses()
return empty;
@Override
public Set<Object> getSingletons()
return singletons;
bean 始终为空!
我已经尝试过这个解决方案:
我已将 @Stateless 放在 HelloWorldResources 上 我已经在 WEB-INF 中创建 beans.xml我已更改 MyRESTApplication 与
@ApplicationPath("wsapp") 公共类 MyRESTApplication 扩展应用程序
你能帮帮我吗?
PS:我没有 EAR,我不想用它
【问题讨论】:
我正在尝试实现同样的目标。如果您找到了解决方案,请告诉我。 亲爱的@Fabio Mignogna,我也有同样的问题,请告诉我它是如何解决的...... 【参考方案1】:我已经设法解决了这个问题。首先,从 web.xml 中删除所有关于 RESTeasy 的设置。你只需要一个注解 --> @ApplicationPath
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
@ApplicationPath("api")
public class MyRESTApplication extends Application
//nothing required here, leave this empty
这是您的会话 bean 接口。
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Path("MyEJB")
public interface BeanInterface
@Path("username")
@GET
@Produces(MediaType.TEXT_PLAIN)
public String sayHello(@PathParam("username") String username);
这是你的会话 bean。
import javax.ejb.Stateless;
@Stateless
public class EJB implements BeanInterface
@Override
public String sayHello(String username)
return "Hello, "+username;
使用 JBOSS 7.1
用法:http://localhost:8080 /YOURAPPNAME/api/MyEJB/Fabio
输出:你好,法比奥
希望这会有所帮助。
【讨论】:
嗨阿德里安,感谢您的回复,但没有解决我的问题。我的 CRM 有几个 EJB,我想为我的 iPad 应用程序发布一些 Web 服务。我决定做一个查找。 我很高兴遇到这个答案。它帮助我让 CDI 在 RESTeasy 服务中工作。你能解释一下为什么 MyRESTApplication 类的内容是空的吗?它确实有效,但为什么在这里添加单例会导致 CDI 失败? 亲爱的@Adrian Stamin 它对我不起作用,如果您在 JBossEAP 或 Maven 中有任何其他配置,请告诉我...以上是关于使用 RESTeasy 和 JBoss 的外部 @EJB 注入返回 null的主要内容,如果未能解决你的问题,请参考以下文章
JAX-RS + JBoss 7.1.1 + RESTEasy:使用 CDI 的 NullPointException
Springboot 与 RestEasy 集成并部署到 Jboss 服务器
org.jboss.resteasy.core.NoMessageBodyWriterFoundFailure:找不到响应对象类型的 MessageBodyWriter
RestEASY + Jboss 7.x - 当 Accepts 与 @Produces 值不匹配时,您可以默认使用第一个 @Path 吗?