[jboss-jira] [JBoss JIRA] (WFLY-13612) Bean Validation Problem In EJB inheritance

Ivo Studensky (Jira) issues at jboss.org
Thu Jul 2 14:56:14 EDT 2020


    [ https://issues.redhat.com/browse/WFLY-13612?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14189571#comment-14189571 ] 

Ivo Studensky commented on WFLY-13612:
--------------------------------------

If a stateless EJB implements an interface of a JAX-RS resource it gets a proxy created with a superclass being {{java.lang.Object}} due to the following code in {{DefaultComponentViewConfigurator}}:
{code:java}
            //we define it in the modules class loader to prevent permgen leaks
L92:        if (viewClass.isInterface()) {
                proxyConfiguration.setSuperClass(Object.class);
                proxyConfiguration.addAdditionalInterface(viewClass);
                viewConfiguration = view.createViewConfiguration(viewClass, configuration, new ProxyFactory(proxyConfiguration));
            } else {
                proxyConfiguration.setSuperClass(viewClass);
                viewConfiguration = view.createViewConfiguration(viewClass, configuration, new ProxyFactory(proxyConfiguration));
            }
{code}
This leads to a {{java.lang.Object}} returned from {{EjbProxyBeanMetaDataClassNormalizer.normalize()}}:
{code:java}
    public <T> Class<? super T> normalize(Class<T> clazz) {
L56:    if (EjbProxy.class.isAssignableFrom(clazz)) {
            return clazz.getSuperclass();
        }
        return clazz;
    }
{code}
Which then denies the validation.

I can't see any reasonable fix instead of setting the superclass of the proxy to the {{viewClass}}. I've tried to kick up a dirty fix and tests, but that effectively disables the WFLY-11566 fix for cases with a interface, see 

> Bean Validation Problem In EJB inheritance
> ------------------------------------------
>
>                 Key: WFLY-13612
>                 URL: https://issues.redhat.com/browse/WFLY-13612
>             Project: WildFly
>          Issue Type: Bug
>          Components: Bean Validation
>    Affects Versions: 20.0.0.Final
>            Reporter: huaxu wu
>            Assignee: Ivo Studensky
>            Priority: Major
>
>  
> {code:java}
> @Path("/test_action")
> public interface TestResource {
>     @Path("test")
>     @POST
>     @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
>     @Produces(MediaType.APPLICATION_JSON)
>     GeneralOperationResult test2(@FormParam("asdf") @NotBlank String asdf);
> }
> {code}
> {code:java}
> @Stateless
> public class TestResourceImpl implements TestResource {
>     @Override
>     public GeneralOperationResult test2(String asdf) {
>         return GeneralOperationResult.createSuccess("test");
>     }
> }
> {code}
> The above code, the @NotBlank annotation works on wildfly19, but not on wildfly20.
> To make it work on wildfly20, I must add @NotBlank annotation to the override method.
> I wonder it's bug or it's your design?
> The above code, If I remove the @Stateless annotation, the @NotBlank annotation works as expectd.



--
This message was sent by Atlassian Jira
(v7.13.8#713008)



More information about the jboss-jira mailing list