]
Matej Novotny commented on WFLY-9425:
-------------------------------------
Actually, when I bypass this error on Weld side (modify accessibility of method), I then
get the correct error message - so EJB subsystem seems to handle this correctly.
{code}
javax.ejb.EJBException: WFLYEJB0224: Not a business method java.lang.String
org.jboss.weld.tests.ejb.stateless.noInterfaceNonPublic.ProblematicBean.ping(). Do not
call non-public methods on EJB's
at
org.jboss.weld.tests.ejb.stateless.noInterfaceNonPublic.NoInterfaceNonPublicMethodTest.testExceptionThrown(NoInterfaceNonPublicMethodTest.java:53)
{code}
EJB no-interface view, non-public method behaviour
--------------------------------------------------
Key: WFLY-9425
URL:
https://issues.jboss.org/browse/WFLY-9425
Project: WildFly
Issue Type: Bug
Components: EJB
Affects Versions: 10.1.0.Final, 11.0.0.CR1
Reporter: Matej Novotny
Priority: Minor
First of all, I am not sure whether this is bug or a feature.
This is based on a [SO
question|https://stackoverflow.com/questions/46602452] -
{{@Stateless}} no-interface view bean with non-public method. You inject this bean into
other bean (using CDI) and try to invoke that non-public method.
According to EJB spec, this should throw {{EJBException}} (chapter _Session Bean’s
No-Interface View_):
bq. Only public methods of the bean class and of any superclasses except java.lang.Object
may be invoked through the no-interface view. Attempted invocations of methods with any
other access modifiers via the no-interface view reference must result in the
javax.ejb.EJBException.
I put together a [Weld
test|https://github.com/manovotn/core/commit/e5fca57be714267154c71b442a99...] for
this - feel free to browse the code.
When invoked in Weld, this *does not throw {{EJBException}}* but in fact fails on
{{IllegalAccess}} when an attempt is made to access that method.
Note that in Weld code, we are explicitly handling these EJB invocations [using a method
which does not override accessibility
rules|https://github.com/weld/core/blob/2.3/impl/src/main/java/org/jboss/...]
and I suppose it's there for a reason.