You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by "Maarten Billemont (JIRA)" <ji...@apache.org> on 2008/10/01 09:33:44 UTC

[jira] Resolved: (WICKET-1848) IllegalArgumentException while invoking method on injected proxy object (object is not an instance of declaring class)

     [ https://issues.apache.org/jira/browse/WICKET-1848?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Maarten Billemont resolved WICKET-1848.
---------------------------------------

    Resolution: Invalid

Caused by two EJBs which were given the same JNDI binding.

> IllegalArgumentException while invoking method on injected proxy object (object is not an instance of declaring class)
> ----------------------------------------------------------------------------------------------------------------------
>
>                 Key: WICKET-1848
>                 URL: https://issues.apache.org/jira/browse/WICKET-1848
>             Project: Wicket
>          Issue Type: Bug
>          Components: wicket, wicket-extensions
>    Affects Versions: 1.4-M3
>            Reporter: Maarten Billemont
>            Assignee: Igor Vaynberg
>
> The problem description:
> I have some EJB service beans which I'd like to use in my wicket application.  The service beans implement @Local interfaces which all have a public static final String BINDING field that contains the JNDI binding of the bean that implements them.  I use this BINDING field to lookup the bean and inject it into my Wicket pages using the JavaEEComponentInjector.
> The problem, however, occurs when accessing methods of these injected bean proxy objects.  I'm not entirely sure what the cause is and I've noticed the issue to be rather unpredictable - probably due to the fact that I really don't get what's going wrong.
> In any case; for some reason when I invoke methods on my proxy objects, Wicket's proxy object's reflection seems unable to actually perform the call on the target object.  I know far too little of how proxy objects work internally to understand what exactly is going on and what exactly might be failing to give any more details than this.
> I'm not sure whether this is an issue in wicket-ioc or wicket-contrib-javaee though seeing as the exception originates from within LazyInitProxyFactory I'm betting on wicket-ioc (which isn't in the list of components of this JIRA?)
> The exception:
> org.apache.wicket.WicketRuntimeException: Method onFormSubmitted of interface org.apache.wicket.markup.html.form.IFormSubmitListener targeted at component [Marku
>     at org.apache.wicket.RequestListenerInterface.invoke(RequestListenerInterface.java:193)
>     at org.apache.wicket.request.target.component.listener.ListenerInterfaceRequestTarget.processEvents(ListenerInterfaceRequestTarget.java:73)
>     at org.apache.wicket.request.AbstractRequestCycleProcessor.processEvents(AbstractRequestCycleProcessor.java:91)
>     at org.apache.wicket.RequestCycle.processEventsAndRespond(RequestCycle.java:1188)
>     at org.apache.wicket.RequestCycle.step(RequestCycle.java:1265)
>     at org.apache.wicket.RequestCycle.steps(RequestCycle.java:1366)
>     at org.apache.wicket.RequestCycle.request(RequestCycle.java:499)
>     at org.apache.wicket.protocol.http.WicketFilter.doGet(WicketFilter.java:387)
>     at org.apache.wicket.protocol.http.WicketServlet.doPost(WicketServlet.java:145)
>     at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
>     at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
>     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
>     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>     at net.link.safeonline.sdk.auth.filter.ContainerLoginFilter.doFilter(ContainerLoginFilter.java:70)
>     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
>     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>     at net.link.safeonline.sdk.auth.filter.JAASLoginFilter.doFilter(JAASLoginFilter.java:93)
>     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
>     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>     at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
>     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
>     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
>     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
>     at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:179)
>     at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
>     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
>     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
>     at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
>     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
>     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262)
>     at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
>     at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
>     at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)
>     at java.lang.Thread.run(Thread.java:595)
> Caused by: java.lang.reflect.InvocationTargetException
>     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>     at java.lang.reflect.Method.invoke(Method.java:585)
>     at org.apache.wicket.RequestListenerInterface.invoke(RequestListenerInterface.java:182)
>     ... 34 more
> Caused by: java.lang.IllegalArgumentException: object is not an instance of declaring class
>     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>     at java.lang.reflect.Method.invoke(Method.java:585)
>     at org.apache.wicket.proxy.LazyInitProxyFactory$JdkHandler.invoke(LazyInitProxyFactory.java:416)
>     at org.apache.wicket.proxy.$Proxy1013.createAccount(Unknown Source)
>     at net.link.safeonline.demo.bank.webapp.NewAccountPage$AccountForm.onSubmit(NewAccountPage.java:74)
>     at org.apache.wicket.markup.html.form.Form.delegateSubmit(Form.java:1347)
>     at org.apache.wicket.markup.html.form.Form.onFormSubmitted(Form.java:797)
>     ... 39 more
> The (relevant) Wicket code:
> public class AccountApplication extends WebApplication {
>     @Override
>     protected void init() {
>         addComponentInstantiationListener(new JavaEEComponentInjector(this,
>                 new IJndiNamingStrategy() {
>                     private final StandardJndiNamingStrategy defaultStrategy  = new StandardJndiNamingStrategy();
>                     @SuppressWarnings("unchecked")
>                     public String calculateName(String ejbName, Class ejbType) {
>                         try {
>                             Field bindingField = ejbType.getDeclaredField("BINDING");
>                             Object binding = bindingField.get(null);
>                             if (binding != null)
>                                 return binding.toString();
>                         } catch (Exception e) {
>                             ...
>                         }
>                         return this.defaultStrategy.calculateName(ejbName, ejbType);
>                     }
>                 }));
>     }
> ...
> }
> public abstract class LayoutPage extends WebPage {
>     @EJB
>     transient AccountService     accountService;
> ...
> }
> public class NewAccountPage extends LayoutPage {
> ...
>     class AccountForm extends Form<String> {
> ...
>         @Override
>         protected void onSubmit() {
>             accountService.createAccount(...);
>         }
> }

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.