[jboss-jira] [JBoss JIRA] (AS7-5260) Synthetic method passed in InvocationContext
jaikiran pai (JIRA)
jira-events at lists.jboss.org
Mon Aug 6 03:46:07 EDT 2012
[ https://issues.jboss.org/browse/AS7-5260?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
jaikiran pai updated AS7-5260:
------------------------------
Assignee: David Lloyd
Affects Version/s: 7.1.2.Final (EAP)
7.1.1.Final
(was: 7.2.0.Alpha1)
Component/s: EE
Forum Reference: https://community.jboss.org/thread/203153 (was: https://community.jboss.org/thread/203153)
> Synthetic method passed in InvocationContext
> --------------------------------------------
>
> Key: AS7-5260
> URL: https://issues.jboss.org/browse/AS7-5260
> Project: Application Server 7
> Issue Type: Bug
> Components: EE
> Affects Versions: 7.1.1.Final, 7.1.2.Final (EAP)
> Reporter: Thomas Woelfle
> Assignee: David Lloyd
> Labels: as7, hibernate_validation, interceptor
>
> We have a JEE interceptor that validates method calls using the MethodValidator from the hibernate-validator package. We are running into problems when generic methods on stateless session beans are called that have been overwritten in a subclass. The problem is that the InvocationContext passed into our interceptor references the synthetic bridge method generated by the compiler instead of the correct overwritten method. Synthetic methods are ignored by hibernate-validator (see BeanMetaDataImpl.initMethodConstraints). This results in a NullPointerException when hibernate-validator tries to validate the given synthetic bridge method.
> Code example:
> public interface CrudService<D extends PersistentElement> {
> D elementById(long id);
> }
> @Local
> public interface AccountService extends CrudService<Account> {
> ... some additional methods
> }
> public class AbstractCrudServiceImpl<D extends PersistentElement> implements CrudService<D> {
> public D elementById(long id) {
> ... do something
> }
> }
> @Stateless
> public class AccountServiceImpl extends AbstractCrudServiceImpl<Account> implements AccountService {
> @Override
> public Account elementById(long id) {
> ... a specialized implementation
> }
> }
> public class SomeOtherSessionBean {
> @Inject
> private AccountService accountService;
>
> public void doSomething() {
> accountService.elementById(1);
> }
> }
> In the example code above 'SomeOtherSessionBean.doSomething()' calls the method 'elementById'. In that case the InvocationContext passed into our interceptor references the synthetic bridge method with the signature 'PersistentElement AccountServiceImpl.elementById(long)' instead of the concrete method 'Account AccountServiceImpl.elementById(long)'.
> This seems to be a bug, isn't it?
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.jboss.org/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the jboss-jira
mailing list