Uploaded image for project: 'TomEE'
  1. TomEE
  2. TOMEE-2709

CDI Principal injection: object is not an instance of declaring class

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Open
    • Major
    • Resolution: Unresolved
    • 8.0.0-M3, 8.0.0-Final
    • None
    • None
    • None

    Description

      Copied from the Mailing-List:

      ---------- Forwarded message ---------
      From: makkus <sancho-fx3@gmx.de>
      Date: Mon, Oct 14, 2019 at 5:14 AM
      Subject: CDI Principal injection: object is not an instance of declaring
      class
      To: <users@tomee.apache.org>

      Hi Folks,

      in TomEE 8.0.0 there seems to be something wrong with the Principal
      injection: The follwoing code works fine in M2:

      package leaktest;

      import java.security.Principal;
      import javax.enterprise.context.RequestScoped;
      import javax.inject.Inject;
      import javax.inject.Named;

      @Named
      @RequestScoped
      public class PrincipalTest {

      @Inject
      private Principal principal;

      public String userName()

      Unknown macro: { return principal.getName(); }

      }

      Inside a JSF page I can use "User Name: #

      Unknown macro: {principalTest.userName()}

      " to
      display the user name. (See attached leak2.war
      <http://tomee-openejb.979440.n4.nabble.com/file/t376354/leak2.war> or
      https://1drv.ms/u/s!AlHB9FAlFWW_iLJlTcyBEqApE_UAvQ?e=HODheK for example. )

      In 8.0.0. this is code will produce an IllegalArgumentException:

      java.lang.IllegalArgumentException: object is not an instance of declaring
      class

      java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native
      Method)

      java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

      java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      java.base/java.lang.reflect.Method.invoke(Method.java:566)

      org.apache.openejb.cdi.ManagedSecurityService$PrincipalInvocationHandler.invoke(ManagedSecurityService.java:183)
      com.sun.proxy.$Proxy72.getName(Unknown Source)
      leaktest.PrincipalTest.userName(PrincipalTest.java:25)

      leaktest.PrincipalTest$$OwbNormalScopeProxy0.userName(leaktest/PrincipalTest.java)

      java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native
      Method)

      java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

      java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      java.base/java.lang.reflect.Method.invoke(Method.java:566)
      javax.el.BeanELResolver.invoke(BeanELResolver.java:158)
      ...

      Doese someone kow if this code is unsupported in 8.0.0 ? How can I get a
      reference to the principal name in 8.0.0.

      Best Regards,
      Marcus

      Attachments

        Activity

          People

            Unassigned Unassigned
            rzo1 Richard Zowalla
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated: