我的配置是:JBoss Wildfly 8.0.0,EJB 3.0,Resteasy 3.0.6,带有web,ejb,api模块的EAR项目。
我的网络模块中有一个用@Path注释的休息资源:
@Path("/boxes")
@Produces(MediaType.APPLICATION_JSON)
@Stateless
public class BoxServiceResource {
@EJB
private IBoxService boxService;
@GET
@Path("/test")
@Produces("text/plain")
public String test() {
return "test string";
}
@GET
@Path("/list/{date}/{type}")
public List<BoxDTO> getBoxesForDate(@PathParam("date") String date,
@PathParam("type") DateType type) {
return boxService.getBoxesForDate(new Date(), DateType.DAY);
}
@GET
@Path("/byId/{id}")
public BoxDTO getBoxById(@PathParam("id") Long id) {
return boxService.getBoxById(5L);
}
}
这是豆子:
@Stateless
public class BoxServiceImpl implements IBoxService {
@Override
public List<BoxDTO> getBoxesForDate(Date date,
DateType type) {
List<BoxDTO> boxes = new ArrayList<>(4);
return boxes;
}
@Override
public BoxDTO getBoxById(Long id) {
BoxDTO box = new BoxDTO();
return box;
}
}
另外,我有Application扩展类,它没有重写实现:
@ApplicationPath("/rest")
public class BoxesRestApplication extends Application {
}
我的web.xml只包含一个JSF servlet,除此之外什么都没有。我在每个模块中都有beans.xml文件。但是,EJB不会被注入。我也用@Inject尝试过相同的结果。 REST资源本身已发布,我可以调用测试方法,但在调用其他两个方法时,它会因NullPointerException而失败。我已经阅读了大量的教程和解决方案,但是,没有一个对我有用。谢谢你的帮助。
答案 0 :(得分:1)
尝试使用@Local批注注释IBoxService。有关此注释的详细信息,请参阅this。接口应该看起来:
@Local
public interface IBoxService{
public List<BoxDTO> getBoxesForDate(Date date, DateType type);
public BoxDTO getBoxById(Long id);
// other methods you would need
}