|
View:
New views
1 Messages
—
Rating Filter:
Alert me
|
|
|
Ambigous with annotation bindingHi guys!
I just implemented testcase which doesn't work as I expected according to patches-for-*full*-binding-annotation-capability post. I think it is quite standart situation but I couldn find any solution :( Could anyone to say how to create HumanService class? Regards -------------------------------------------------------------------------------------- package com.company.performance.pico; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import org.picocontainer.BindKey; import org.picocontainer.DefaultPicoContainer; import org.picocontainer.annotations.Bind; import org.picocontainer.injectors.SetterInjection; import junit.framework.TestCase; public class AmbiguousDependencyTestCase extends TestCase { @Retention(RetentionPolicy.RUNTIME) @Target( { ElementType.FIELD, ElementType.PARAMETER }) @Bind public static @interface FirstService { } @Retention(RetentionPolicy.RUNTIME) @Target( { ElementType.FIELD, ElementType.PARAMETER }) @Bind public static @interface SecondService { } public static interface Service { void start(); } public static abstract class SuperService implements Service { private Service firstService; private Service secondService; public Service getFirstService() { return firstService; } public void setFirstService(@FirstService Service firstService) { this.firstService = firstService; } public Service getSecondService() { return secondService; } public void setSecondService(@SecondService Service secondService) { this.secondService = secondService; } public void start() { System.out.println(this.getClass().getCanonicalName()); } } public static class RightService extends SuperService { } public static class LeftService extends SuperService { } public static class HumanService extends SuperService { } private DefaultPicoContainer mpc; public void testRussianDollAnnotationInjection() { mpc = new DefaultPicoContainer(new SetterInjection()); mpc.addComponent(HumanService.class); mpc.addComponent(BindKey.bindKey(Service.class, FirstService.class), RightService.class); mpc.addComponent(BindKey.bindKey(Service.class, SecondService.class), LeftService.class); HumanService humanService = mpc.getComponent(HumanService.class); assertNotNull(humanService); assertNotNull(humanService.getFirstService()); assertNotNull(humanService.getSecondService()); assertTrue(humanService.getFirstService() instanceof RightService); assertTrue(humanService.getSecondService() instanceof LeftService); } } -------------------------------------------------------------------------------------- Stack Trace: org.picocontainer.injectors.AbstractInjector$AmbiguousComponentResolutionException: <no-component> needs a 'com.company.performance.pico.AmbiguousDependencyTestCase$Service' injected, but there are too many choices to inject. These:[class com.company.performance.pico.AmbiguousDependencyTestCase$HumanService, class com.company.performance.pico.AmbiguousDependencyTestCase$LeftService], refer http://picocontainer.org/ambiguous-injectable-help.html at org.picocontainer.parameters.BasicComponentParameter.tooManyMatchingAdaptersFound(BasicComponentParameter.java:330) at org.picocontainer.parameters.BasicComponentParameter.findTargetAdapter(BasicComponentParameter.java:308) at org.picocontainer.parameters.BasicComponentParameter.getTargetAdapter(BasicComponentParameter.java:282) at org.picocontainer.parameters.BasicComponentParameter.resolveAdapter(BasicComponentParameter.java:255) at org.picocontainer.parameters.BasicComponentParameter.resolve(BasicComponentParameter.java:173) at org.picocontainer.parameters.ComponentParameter.access$001(ComponentParameter.java:39) at org.picocontainer.parameters.ComponentParameter$1.<init>(ComponentParameter.java:120) at org.picocontainer.parameters.ComponentParameter.resolve(ComponentParameter.java:119) at org.picocontainer.injectors.IterativeInjector.matchParameter(IterativeInjector.java:115) at org.picocontainer.injectors.IterativeInjector.matchParameters(IterativeInjector.java:106) at org.picocontainer.injectors.IterativeInjector.getMatchingParameterListForSetters(IterativeInjector.java:87) at org.picocontainer.injectors.IterativeInjector.access$000(IterativeInjector.java:34) at org.picocontainer.injectors.IterativeInjector$2.run(IterativeInjector.java:142) at org.picocontainer.injectors.AbstractInjector$ThreadLocalCyclicDependencyGuard.observe(AbstractInjector.java:289) at org.picocontainer.injectors.IterativeInjector.getComponentInstance(IterativeInjector.java:149) at org.picocontainer.DefaultPicoContainer.getInstance(DefaultPicoContainer.java:615) at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:583) at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:570) at org.picocontainer.parameters.BasicComponentParameter$10.resolveInstance(BasicComponentParameter.java:190) at org.picocontainer.parameters.ComponentParameter$1.resolveInstance(ComponentParameter.java:136) at org.picocontainer.injectors.IterativeInjector.decorateComponentInstance(IterativeInjector.java:160) at org.picocontainer.injectors.IterativeInjector.access$200(IterativeInjector.java:34) at org.picocontainer.injectors.IterativeInjector$2.run(IterativeInjector.java:144) at org.picocontainer.injectors.AbstractInjector$ThreadLocalCyclicDependencyGuard.observe(AbstractInjector.java:289) at org.picocontainer.injectors.IterativeInjector.getComponentInstance(IterativeInjector.java:149) at org.picocontainer.DefaultPicoContainer.getInstance(DefaultPicoContainer.java:615) at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:580) at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:588) at com.company.performance.pico.AmbiguousDependencyTestCase.testRussianDollAnnotationInjection(AmbiguousDependencyTestCase.java:79) 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:597) at junit.framework.TestCase.runTest(TestCase.java:154) at junit.framework.TestCase.runBare(TestCase.java:127) at junit.framework.TestResult$1.protect(TestResult.java:106) at junit.framework.TestResult.runProtected(TestResult.java:124) at junit.framework.TestResult.run(TestResult.java:109) at junit.framework.TestCase.run(TestCase.java:118) at junit.framework.TestSuite.runTest(TestSuite.java:208) at junit.framework.TestSuite.run(TestSuite.java:203) at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) -------------------------------------------------------------------------------------- |
| Free embeddable forum powered by Nabble | Forum Help |