我正在做一个带有maven和子模块的Java企业应用程序。我有以下内容:
我的EJB模块具有:
@LocalBean
@Stateless(name = "serviceBeanEJB")
public class ServiceBean {
public ResponseBean foo(RequestBean request) {
// code here
}
}
我的Web模块具有:
@Stateless
@Path("rest-resource")
@Produces({ MediaType.APPLICATION_JSON })
public class TestResource {
@EJB(beanName = "serviceBeanEJB")
private ServiceBean serviceBean;
@POST
@Path("res1")
@Consumes({ MediaType.APPLICATION_JSON })
public Response resourceFunction(@Context HttpHeaders httpHeaders, RequestBean request) throws Exception {
ResponseBean response = serviceBean.foo(request);
String result = new ObjectMapper().setDateFormat(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX"))
.writerWithDefaultPrettyPrinter().writeValueAsString(response);
return Response.ok().entity(result).build();
}
}
这是由EAR模块打包的,并且已正确部署在weblogic服务器12.2.1上。
但是,当我测试此REST服务时,由于没有在TestResource类中实例化serviceBean,因此会出现nullpointer异常。
在EAR模块中,我具有那些子模块和maven-ear-plugin中的模块的依赖关系。
我尝试了使用weblogic-ejb-jar.xml和Bean的名称,如下所示:
<?xml version = '1.0' encoding = 'UTF-8'?>
<weblogic-ejb-jar xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.oracle.com/weblogic/weblogic-ejb-jar http://xmlns.oracle.com/weblogic/weblogic-ejb-jar/1.5/weblogic-ejb-jar.xsd"
xmlns="http://xmlns.oracle.com/weblogic/weblogic-ejb-jar">
<weblogic-enterprise-bean>
<ejb-name>serviceBeanEJB</ejb-name>
<stateless-session-descriptor/>
</weblogic-enterprise-bean>
</weblogic-ejb-jar>
但是仍然不起作用。这很奇怪,因为如果我创建另一个Web模块(如SOAP Web服务),则对本地EJB的此调用将起作用。