[cdi-dev] [JBoss JIRA] (CDI-713) Why can't Provider<?> injection points use non-proxyable types with @RequestScoped providers?

Scott Stark (JIRA) issues at jboss.org
Fri Aug 18 03:59:00 EDT 2017


Scott Stark created CDI-713:
-------------------------------

             Summary: Why can't Provider<?> injection points use non-proxyable types with @RequestScoped providers?
                 Key: CDI-713
                 URL: https://issues.jboss.org/browse/CDI-713
             Project: CDI Specification Issues
          Issue Type: Clarification
          Components: Portable Extensions, Resolution
    Affects Versions: 1.2.Final
         Environment: WildflySwarm 2017.7.0 and Weld 2.4.3.Final.
            Reporter: Scott Stark


In looking into the use of javax.inject.Provider wrapped injection point values when dealing with @RequestScoped producers:


{code:java}
    @Inject
    @Claim(standard = Claims.iat)
    private Provider<Long> providerIAT;
{code}

{code:java}
    @Produces
    @Claim(standard = Claims.iat)
    @RequestScoped
    Long getIAT() {
        JsonWebToken jwt = getJWTPrincpal();
        if (jwt == null) {
            System.out.printf("getIAT, null JsonWebToken\n");
            return null;
        }
        System.out.printf("getIAT\n");
        return jwt.getIssuedAtTime();
    }
{code}

I ran into the following exception:

{noformat}
Caused by: org.jboss.weld.exceptions.UnproxyableResolutionException: WELD-001437: Bean type class java.lang.Long is not proxyable because it is final - {2}.
	at org.jboss.weld.util.Proxies.getUnproxyableClassException(Proxies.java:218)
	at org.jboss.weld.util.Proxies.getUnproxyableTypeException(Proxies.java:182)
	at org.jboss.weld.util.Proxies.getUnproxyableTypeException(Proxies.java:144)
	at org.jboss.weld.bean.proxy.ClientProxyProvider.getClientProxy(ClientProxyProvider.java:242)
	at org.jboss.weld.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:736)
	at org.jboss.weld.bean.builtin.InstanceImpl.getBeanInstance(InstanceImpl.java:189)
	at org.jboss.weld.bean.builtin.InstanceImpl.get(InstanceImpl.java:100)
	at org.eclipse.microprofile.jwt.test.jaxrs.RolesEndpoint.getInjectedIssuer(RolesEndpoint.java:269)
{noformat}

The spec is not really clear on why this should happen as the javax.inject.Provider is a proxy for the underlying type. It seems to me that this should be allowed, and that the exception I'm seeing from Weld-2.4.3.Final is a bug, but I wanted to get a clarification on why this might be disallowed.





--
This message was sent by Atlassian JIRA
(v7.2.3#72005)


More information about the cdi-dev mailing list