0 Replies Latest reply on Apr 24, 2009 3:32 AM by adamw

    Client interceptor giving an NPE

    adamw

      Hello,

      First, my setup. I have an .ear application, deployed on one jboss instance (4.2.3), which contains an EJB with a remote interface.

      I also have a web application, deployed on another jboss instance (also 4.2.3), which calls a method on the EJB.

      Now, I'd like to add a client interceptor. I found a testcase in the ejb3 module of jbossas svn, but I must be missing some crucial step :).

      The client interceptor class is very simple and is deployed both with the .ear and .war (on both jbosses) in /lib:

      public class CustomInterceptor implements Interceptor, Serializable {
       private static final long serialVersionUID = 3228182870246296423L;
       public String getName() { return "Custom interceptor"; }
       public Object invoke(Invocation invocation) throws Throwable {
       System.out.println("!!! INTERCEPTING !!!");
       invocation.getMetaData().addMetaData("jboss.ejb3.client.invocation.metadata", "xxx", "yyy", PayloadKey.AS_IS);
       return invocation.invokeNext();
       }
      }
      


      To bind the interceptor with the bean, I deploy a jboss-aop.xml file (in the .ear), which has the following:

      <aop xmlns="urn:jboss:aop-beans:1.0">
       <interceptor class="example.CustomInterceptor" scope="PER_VM"/>
      
       <stack name="CustomStatelessSessionClientInterceptors">
       <interceptor-ref name="org.jboss.ejb3.remoting.IsLocalInterceptor"/>
       <interceptor-ref name="org.jboss.aspects.security.SecurityClientInterceptor"/>
       <interceptor-ref name="org.jboss.aspects.tx.ClientTxPropagationInterceptor"/>
       <interceptor-ref name="example.CustomInterceptor"/>
       <interceptor-ref name="org.jboss.aspects.remoting.InvokeRemoteInterceptor"/>
       </stack>
      </aop>
      


      Also, on the bean class, I have the @RemoteBinding annotation, as in the testcase:

      @Stateless
      @RemoteBinding(interceptorStack="CustomStatelessSessionClientInterceptors")
      public class HelloBean implements LocalHello, RemoteHello, Hello {
      ...
      }
      


      Everything deploys fine, however when I invoke a bean's method from the client web application, I get the following exception:

      java.lang.NullPointerException
       org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
       org.jboss.aspects.tx.ClientTxPropagationInterceptor.invoke(ClientTxPropagationInterceptor.java:67)
       org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
       org.jboss.aspects.security.SecurityClientInterceptor.invoke(SecurityClientInterceptor.java:53)
       org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
       org.jboss.ejb3.remoting.IsLocalInterceptor.invoke(IsLocalInterceptor.java:74)
       org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
       org.jboss.ejb3.stateless.StatelessRemoteProxy.invoke(StatelessRemoteProxy.java:107)
       $Proxy58.printToSysOut(Unknown Source)
       client.ClientServlet.doGet(ClientServlet.java:47)
       javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
       javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
       org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
      


      Looks like the first three interceptors work fine, but then it fails on mine. Any ideas what can be wrong? I don't see any special messages when deploying.