我试图通过注释将无状态EJB注入到JAX-RS Web服务中。不幸的是,EJB是正义的null
,NullPointerException
当我尝试使用它时我得到了。
@Path("book")
public class BookResource {
@EJB
private BookEJB bookEJB;
public BookResource() {
}
@GET
@Produces("application/xml")
@Path("/{bookId}")
public Book getBookById(@PathParam("bookId") Integer id)
{
return bookEJB.findById(id);
}
}
我究竟做错了什么?
以下是有关我的机器的一些信息:
你们能举个可行的例子吗?
我不确定这是否行得通。所以:
选项1:使用注入提供程序SPI
实现一个提供程序,它将执行查找并注入EJB。看到:
@EJB注入。
com.sun.jersey:jersey-server:1.17的示例:
import com.sun.jersey.core.spi.component.ComponentContext;
import com.sun.jersey.core.spi.component.ComponentScope;
import com.sun.jersey.spi.inject.Injectable;
import com.sun.jersey.spi.inject.InjectableProvider;
import javax.ejb.EJB;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.ws.rs.ext.Provider;
import java.lang.reflect.Type;
/**
* JAX-RS EJB Injection provider.
*/
@Provider
public class EJBProvider implements InjectableProvider<EJB, Type> {
public ComponentScope getScope() {
return ComponentScope.Singleton;
}
public Injectable getInjectable(ComponentContext cc, EJB ejb, Type t) {
if (!(t instanceof Class)) return null;
try {
Class c = (Class)t;
Context ic = new InitialContext();
final Object o = ic.lookup(c.getName());
return new Injectable<Object>() {
public Object getValue() {
return o;
}
};
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
选项2:使BookResource成为EJB
@Stateless
@Path("book")
public class BookResource {
@EJB
private BookEJB bookEJB;
//...
}
看到:
如何将REST服务与EJB 3.1结合
EJB 3.1和REST-轻量级混合
选项3:使用CDI
@Path("book")
@RequestScoped
public class BookResource {
@Inject
private BookEJB bookEJB;
//...
}
JAX-RS API提供以下注解可在java中开发RESTful应用程序。 下面我们将使用 jersey 实现来开发JAX-RS示例。首先打开Eclipse,创建一个动态Web项目:JaxrsWeb。 Jersey Jar文件下载网址:https://jersey.github.io/download.html 1. JAX-RS注释 javax.ws.rs 包中包含JAX-RS注释。 注解 描述
泽西-客户端 泽西-普通 jersey-container-servlet jersey-container-servlet-core 泽西-服务器 如果我这样做,我总是得到以下异常: 经过一些研究,我发现我应该添加jersey-servlet-1.12.jar,而不是从上面发布的下载源添加jar。所以我做了。我将其添加到web.xml中
你好,我曾与JAX-WS合作开发基于SOAP的网络服务。现在我想使用REST,因为正如我从这里学习的那样,REST比SOAP有优势。 但从不同的文章中,我知道我们也可以从JAX-WS创建RESTful Web服务。但是大多数人说我们应该使用JAX-RS而不是JAX-WS。 我的问题是JAX-WS RESTful webservice和JAX-RS(泽西)之间有什么区别。JAX-RS相对于JAX-W
我尝试构建一个带有Rest服务和EJB注入的Java EE7应用程序。我创建了一个多模块maven项目,并将其部署在Glassfish 4上。我最后一个EAR包含一个带有EJB的JAR,例如,带有我的Rest服务定义: 当我部署我的应用程序时,我看到下面的日志似乎还可以。即使我想知道它为什么定义“java:global”JNDI,因为默认情况下@Stateless EJB是@local: 编辑1:
问题内容: 我在下面有这样的设置。这是一个简化的版本,但我认为它已涵盖了基本思想。我正在使用Jersey 2.16,Java 1.8和Glassfish Open Source 4.1 但是,当我部署并尝试访问Web服务时,我从安全上下文中得到了NullPointer异常。似乎根本没有注入上下文。我检查了这是secContext变量本身,而不仅仅是从getUserPrincipal()返回的nul
我正在尝试使用JAX-RS创建和部署一个RESTful Web服务,并将其部署到tomcat。我不想使用任何IDE。在Tomcat中,我在webapps中有以下目录结构\ 我的web.xml包含: 以及类文件是从文件通知程序编译而来的。java。 当我试图访问Web服务在我得到以下错误: --类型异常报告 --消息类javax。ws。rs.core。应用程序不是Servlet --说明服务器遇到内