外部@EJB注入使用RESTeasy和JBoss返回null

外部@EJB注入使用RESTeasy和JBoss返回null,jboss,ejb,resteasy,Jboss,Ejb,Resteasy,我正在用RESTeasy在JBoss6 Final上开发一个RESTful Web服务。 我有一个外部EJB,我想在Web服务上注入EJB 这是EJB的代码 BeanLocalInterface.java @Local public interface BeanLocalInterface { public String sayHello(); } java @Stateless @LocalBinding(jndiBinding = "BeanLocal") public class B

我正在用RESTeasy在JBoss6 Final上开发一个RESTful Web服务。 我有一个外部EJB,我想在Web服务上注入EJB

这是EJB的代码

BeanLocalInterface.java

@Local
public interface BeanLocalInterface {
  public String sayHello();
}
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;
    }
}
公共类MyRESTApplication扩展了应用程序{
private Set singleton=new HashSet();
私有集>();
公共MyRESTApplication(){
添加(新的HelloWorldResource());
}
@凌驾

public Set我已经设法解决了这个问题。首先,从web.xml中删除关于RESTeasy的所有设置。您只需要一个adnotation-->@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;
}

}
使用JBoss7.1

用法:http://localhost:8080/YOURAPPNAME/api/MyEJB/Fabio

输出:你好,法比奥


希望这能有所帮助。

我正在尝试实现同样的目标。请告诉我你是否找到了解决方案。亲爱的@Fabio Mignogna,我也有同样的问题,请告诉我它是如何解决的……嗨,adrian,谢谢你的回复,但没有解决我的问题。我的CRM中有几个EJB,我想为我的iPad应用程序发布一些web服务。我决定查找。我很高兴找到了这个答案。它帮助我让CDI在RESTeasy服务中工作。你能解释一下为什么MyRESTApplication类内容是空的吗?它确实有效,但为什么在这里添加单例会导致CDI失败?亲爱的@Adrian Stamport它对我不起作用,请告诉我你在JBoss中是否有任何其他配置EAP或Maven。。。