0 Replies Latest reply on Jul 2, 2008 8:29 AM by Olivier Thierry

    NPE when calling getCallerPrincipal on SessionContext

    Olivier Thierry Apprentice

      I wrote the following interceptor :

      public class SecurityInterceptor
      {
       @javax.annotation.Resource
       protected javax.ejb.SessionContext context;
      
       @javax.interceptor.AroundInvoke
       public Object execute(javax.interceptor.InvocationContext ctx)
       throws Exception
       {
       try
       {
       if (context != null) {
       if (context.getCallerPrincipal() != null) {
       System.out.println(context.getCallerPrincipal().getName());
       }
       else {
       System.out.println("principal = null");
       }
       }
       return ctx.proceed();
       }
       catch (Exception e)
       {
       e.printStackTrace();
       throw e;
       }
       }
      }


      When running this interceptor, I have a NullPointerException when calling getCallerPrincipal method on SessionContext :

      java.lang.NullPointerException
       at org.jboss.ejb3.EJBContextImpl.getCallerPrincipal(EJBContextImpl.java:164)
       at t4.core.employee.SecurityInterceptor.execute(SecurityInterceptor.java:29)
       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
       at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
       at java.lang.reflect.Method.invoke(Method.java:585)
       at org.jboss.ejb3.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:118)
       at org.jboss.ejb3.interceptor.EJB3InterceptorsInterceptor.invoke(EJB3InterceptorsInterceptor.java:63)
       at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
       at org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor.invoke(TransactionScopedEntityManagerInterceptor.java:54)
       at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
       at org.jboss.ejb3.AllowedOperationsInterceptor.invoke(AllowedOperationsInterceptor.java:47)
       at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
       at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:79)
       at org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:193)
       at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
       at org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:76)
       at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
       at org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(StatelessInstanceInterceptor.java:64)
       at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
       at org.jboss.ejb3.tx.NullInterceptor.invoke(NullInterceptor.java:42)
       at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
       at org.jboss.ejb3.security.Ejb3AuthenticationInterceptorv2.invoke(Ejb3AuthenticationInterceptorv2.java:166)
       at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
       at org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:46)
       at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
       at org.jboss.ejb3.asynchronous.AsynchronousInterceptor.invoke(AsynchronousInterceptor.java:106)
       at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
       at org.jboss.ejb3.stateless.StatelessContainer.localInvoke(StatelessContainer.java:249)
       at org.jboss.ejb3.stateless.StatelessContainer.localInvoke(StatelessContainer.java:214)
       at org.jboss.ejb3.stateless.StatelessLocalProxy.invoke(StatelessLocalProxy.java:86)
       at $Proxy153.loadAllMyEmployees(Unknown Source)
       at t4.core.employee.internal.test.EmployeeInternalServiceTest.testEmployee(EmployeeInternalServiceTest.java:54)
       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
       at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
       at java.lang.reflect.Method.invoke(Method.java:585)
       at org.testng.internal.MethodHelper.invokeMethod(MethodHelper.java:580)
       at org.testng.internal.Invoker.invokeMethod(Invoker.java:478)
       at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:607)
       at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:874)
       at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125)
       at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109)
       at org.testng.TestRunner.runWorkers(TestRunner.java:689)
       at org.testng.TestRunner.privateRun(TestRunner.java:566)
       at org.testng.TestRunner.run(TestRunner.java:466)
       at org.testng.SuiteRunner.runTest(SuiteRunner.java:301)
       at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:296)
       at org.testng.SuiteRunner.privateRun(SuiteRunner.java:276)
       at org.testng.SuiteRunner.run(SuiteRunner.java:191)
       at org.testng.TestNG.createAndRunSuiteRunners(TestNG.java:808)
       at org.testng.TestNG.runSuitesLocally(TestNG.java:776)
       at org.testng.TestNG.run(TestNG.java:701)
       at org.apache.maven.surefire.testng.TestNGExecutor.run(TestNGExecutor.java:77)
       at org.apache.maven.surefire.testng.TestNGXmlTestSuite.execute(TestNGXmlTestSuite.java:92)
       at org.apache.maven.surefire.Surefire.run(Surefire.java:177)
       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
       at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
       at java.lang.reflect.Method.invoke(Method.java:585)
       at org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:334)
       at org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:980)
      


      I can retrieve the principal with org.jboss.security.SecurityAssociation.getPrincipal(), but this is a JBoss specific feature.

      What really upsets me is that I had the same error with EJB 3.0 embeddable container, and that's why I try to migrate to JBoss Embedded beta3 for a few days ! People reported this problem for EJB 3.0 embeddable container a few months ago, but they were said that it was no longer supported : http://jira.jboss.com/jira/browse/EJBTHREE-615