[ 
https://issues.apache.org/jira/browse/WICKET-1130?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12634880#action_12634880
 ] 

Tuomas Karkkainen commented on WICKET-1130:
-------------------------------------------

injecting concrete classes without zero argument constructor into wicket 
components fails, even if the injection is properly configured.  

I have this:

public ConcreteClass(String a, String b) { ... }
bind(ConcreteClass.class).toInstance(new ConcreteClass("a","b"));

if I have

@Inject
private ConcreteClass concreteClass 

in a wicket component it will not be injected but cglib will complain.  If I 
have it instead in a secondary dependency guice will inject it fine, which is 
confusing. e.g.

public class ConcreteClassHolder {
 @Inject 
 private ConcreteClass concreteClass;
 public getConcreteClass(){...}
}
public class SomethingPanel extends Panel{
 @Inject
 private ConcreteClassHolder concreteClassHolder;
}
 

Instead of confusingly failing, with a "Superclass has no null constructors but 
no arguments were given", I would prefer wicket to atleast check for this 
condition in LazyInitProxyFactory:

public static Object createProxy(final Class type, final IProxyTargetLocator 
locator) {
...
return e.create(); 
}

with maybe:

        try {
                return e.create();
            } catch (final IllegalArgumentException iae) {
                throw new RuntimeException("Cannot proxy concrete class with no 
zero args constructor here, use an interface or see JIRA issue WICKET-1130.");
            }


> Injection of Bound Instance Fails with Exception
> ------------------------------------------------
>
>                 Key: WICKET-1130
>                 URL: https://issues.apache.org/jira/browse/WICKET-1130
>             Project: Wicket
>          Issue Type: Bug
>          Components: wicket-guice
>    Affects Versions: 1.3.0-beta4
>            Reporter: Daniel Spiewak
>            Assignee: Alastair Maw
>             Fix For: 1.5-M1
>
>
> If I try to inject an explicitly bound instance into a component, injection 
> fails with an exception in the creation of the CGLIB proxy:
> java.lang.IllegalArgumentException: Superclass has no null constructors but 
> no arguments were given
> Stupidly, I forgot to save the whole stack trace and the code is now gone 
> from my codebase (since I needed it to work).  To repeat:
> @Override
> public void configure() {
>     bind(EntityManager.class).toInstance(manager);
> }
> Seems wicket-guice is assuming that it needs to create a new instance of 
> everything that's injected, and since EntityManager doesn't have a no-args 
> constructor, such an action fails.  Just an assumption anyway...

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

Reply via email to