Java @EJB依赖注入不';t在JBoss中作为6 NullPointerException工作

Java @EJB依赖注入不';t在JBoss中作为6 NullPointerException工作,java,jakarta-ee,jboss,ejb,cdi,Java,Jakarta Ee,Jboss,Ejb,Cdi,JBossAS6说: public interface ModelClient { public JSONObject _callModel(URL url); } @Stateless @Local(ModelClient.class) public class ModelClientBean implements ModelClient { public JSONObject _callModel(URL url) { /* some implementation */ }

JBossAS6说:

public interface ModelClient {
    public JSONObject _callModel(URL url);
}

@Stateless
@Local(ModelClient.class)
public class ModelClientBean implements ModelClient {
    public JSONObject _callModel(URL url) { /* some implementation */ }
}

@Stateless(name="ejb/ModelServiceBean")
public class ModelServiceBean {

   @EJB
   private ModelClient modelClient;
}
到目前为止还不错。 但任何对客户机建模的尝试都会导致“NullPointerException”

有什么想法吗


更新:ModelServiceBean是从非托管上下文通过JNDI(InitialContext)查找的

17:25:30,186 INFO  [org.jboss.ejb3.session.SessionSpecContainer] Starting jboss.j2ee:ear=rms-ear.ear,jar=rms-ejb-1.0-SNAPSHOT.jar,name=ModelClientBean,service=EJB3
17:25:30,187 INFO  [org.jboss.ejb3.EJBContainer] STARTED EJB: com.domain.rms.ejbs.ModelClientBean ejbName: ModelClientBean
17:25:30,250 INFO  [org.jboss.ejb3.proxy.impl.jndiregistrar.JndiSessionRegistrarBase] Binding the following Entries in Global JNDI:
rms-ear/rms-ejb-1.0-SNAPSHOT.jar/ModelClientBean!local - EJB3.x Default Local Business Interface
rms-ear/rms-ejb-1.0-SNAPSHOT.jar/ModelClientBean!com.domain.rms.ejbs.ModelClient - EJB3.x Local Business Interface
异常堆栈跟踪:

public JobServiceCall() {
    Context context = null;
    try {
        context = new InitialContext();
        modelServiceBean = (ModelServiceBean)context.lookup("..");
    } catch ()...
 }

我们在实现中使用@LocalBean而不是@Local。我也在非远程接口上看到@Local

只是一个猜测,但我认为这可能有效:

Caused by: java.lang.NullPointerException
    at com.domain.rms.ejbs.ModelClientBean._callModel(ModelClientBean.java:53) [:]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [:1.6.0_24]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) [:1.6.0_24]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) [:1.6.0_24]
    at java.lang.reflect.Method.invoke(Method.java:597) [:1.6.0_24]
    at org.jboss.aop.joinpoint.MethodInvocation.invokeTarget(MethodInvocation.java:122) [jboss-aop.jar:2.2.1.GA]
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:111) [jboss-aop.jar:2.2.1.GA]
    at org.jboss.ejb3.interceptors.container.ContainerMethodInvocationWrapper.invokeNext(ContainerMethodInvocationWrapper.java:72) [:1.1.3]
    at org.jboss.ejb3.interceptors.aop.InterceptorSequencer.invoke(InterceptorSequencer.java:76) [:1.1.3]
    at org.jboss.ejb3.interceptors.aop.InterceptorSequencer.aroundInvoke(InterceptorSequencer.java:62) [:1.1.3]
    at sun.reflect.GeneratedMethodAccessor279.invoke(Unknown Source) [:1.6.0_24]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) [:1.6.0_24]
    at java.lang.reflect.Method.invoke(Method.java:597) [:1.6.0_24]
    at org.jboss.aop.advice.PerJoinpointAdvice.invoke(PerJoinpointAdvice.java:174) [jboss-aop.jar:2.2.1.GA]
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) [jboss-aop.jar:2.2.1.GA]
    at org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor.fillMethod(InvocationContextInterceptor.java:74) [:1.1.3]
    at org.jboss.aop.advice.org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor_z_fillMethod_11016588.invoke(InvocationContextInterceptor_z_fillMethod_11016588.java)
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) [jboss-aop.jar:2.2.1.GA]
    at org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor.setup(InvocationContextInterceptor.java:90) [:1.1.3]
    at org.jboss.aop.advice.org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor_z_setup_11016588.invoke(InvocationContextInterceptor_z_setup_11016588.java)
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) [jboss-aop.jar:2.2.1.GA]
    at org.jboss.ejb3.async.impl.interceptor.AsynchronousServerInterceptor.invoke(AsynchronousServerInterceptor.java:128) [:1.7.17]
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) [jboss-aop.jar:2.2.1.GA]
    at org.jboss.ejb3.connectionmanager.CachedConnectionInterceptor.invoke(CachedConnectionInterceptor.java:62) [:1.7.17]
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) [jboss-aop.jar:2.2.1.GA]
    at org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor.invoke(TransactionScopedEntityManagerInterceptor.java:56) [:1.7.17]
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) [jboss-aop.jar:2.2.1.GA]
    at org.jboss.ejb3.AllowedOperationsInterceptor.invoke(AllowedOperationsInterceptor.java:47) [:1.7.17]
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) [jboss-aop.jar:2.2.1.GA]
    at org.jboss.ejb3.tx.NullInterceptor.invoke(NullInterceptor.java:42) [:1.0.3]
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) [jboss-aop.jar:2.2.1.GA]
    at org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(StatelessInstanceInterceptor.java:68) [:1.7.17]
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) [jboss-aop.jar:2.2.1.GA]
    at org.jboss.ejb3.core.context.SessionInvocationContextAdapter.proceed(SessionInvocationContextAdapter.java:95) [:1.7.17]
    at org.jboss.ejb3.tx2.impl.CMTTxInterceptor.invokeInCallerTx(CMTTxInterceptor.java:223) [:0.0.1]
    ... 109 more

如何获得ModelServiceBean的实例?只有当ModelServiceBean本身被注入到某个托管bean(例如Servlet、JSF托管bean等)中时,或者当您通过JNDI请求时,注入才起作用


使用新运算符实例化类时不会发生注入。

@LocalBean在这里不需要,这只定义了OP未使用的附加无接口视图。建议将@Local放在接口上,但在bean类上使用@Local并引用接口具有相同的效果。它只是直接强制bean和接口之间的契约,这通常被认为不是最优的。ModelServiceBean是从非托管上下文通过JNDI(InitialContext)查找的。您在哪里看到这个NPE?在ModelClientBean中?也许你应该发布堆栈跟踪。正如我所料,ModelClient实例的注入发生得很好。不是注入的引用是空的,但问题只是在调用该方法的
\u callModel
方法中。在您遗漏的部分的某个地方,
/*一些实现*/
(在第53行),您的代码导致抛出一个NPE。我找到了它。/*一些实现*/(第53行)读取InputStream并创建json对象。我在这一点上得到一个例外,无法从InputStream等读取。非常感谢您的支持
@Local
public interface ModelClient {
    public JSONObject _callModel(URL url);
}

@Stateless
@LocalBean
public class ModelClientBean implements ModelClient {
    public JSONObject _callModel(URL url) { /* some implementation */ }
}