public void testErrorOnTooManyOrTooFewWithCustomServiceLocatorException() { StaticApplicationContext ctx = new StaticApplicationContext(); ctx.registerSingleton("testService", TestService.class, new MutablePropertyValues()); ctx.registerSingleton("testServiceInstance2", TestService.class, new MutablePropertyValues()); MutablePropertyValues mpv = new MutablePropertyValues(); mpv.addPropertyValue(new PropertyValue("serviceLocatorInterface", TestServiceLocator.class)); mpv.addPropertyValue( new PropertyValue("serviceLocatorExceptionClass", CustomServiceLocatorException1.class)); ctx.registerSingleton("factory", ServiceLocatorFactoryBean.class, mpv); mpv = new MutablePropertyValues(); mpv.addPropertyValue(new PropertyValue("serviceLocatorInterface", TestServiceLocator2.class)); mpv.addPropertyValue( new PropertyValue("serviceLocatorExceptionClass", CustomServiceLocatorException2.class)); ctx.registerSingleton("factory2", ServiceLocatorFactoryBean.class, mpv); mpv = new MutablePropertyValues(); mpv.addPropertyValue(new PropertyValue("serviceLocatorInterface", TestService2Locator.class)); mpv.addPropertyValue( new PropertyValue("serviceLocatorExceptionClass", CustomServiceLocatorException3.class)); ctx.registerSingleton("factory3", ServiceLocatorFactoryBean.class, mpv); ctx.refresh(); TestServiceLocator factory = (TestServiceLocator) ctx.getBean("factory"); try { factory.getTestService(); fail("Must fail on more than one matching type"); } catch (CustomServiceLocatorException1 expected) { assertTrue(expected.getCause() instanceof NoSuchBeanDefinitionException); } TestServiceLocator2 factory2 = (TestServiceLocator2) ctx.getBean("factory2"); try { factory2.getTestService(null); fail("Must fail on more than one matching type"); } catch (CustomServiceLocatorException2 expected) { assertTrue(expected.getCause() instanceof NoSuchBeanDefinitionException); } final TestService2Locator factory3 = (TestService2Locator) ctx.getBean("factory3"); new AssertThrows(CustomServiceLocatorException3.class, "Must fail on no matching types") { public void test() throws Exception { factory3.getTestService(); } }.runTest(); }
public void testStringArgGetter() throws Exception { StaticApplicationContext ctx = new StaticApplicationContext(); ctx.registerSingleton("testService", TestService.class, new MutablePropertyValues()); MutablePropertyValues mpv = new MutablePropertyValues(); mpv.addPropertyValue(new PropertyValue("serviceLocatorInterface", TestServiceLocator2.class)); ctx.registerSingleton("factory", ServiceLocatorFactoryBean.class, mpv); ctx.refresh(); // test string-arg getter with null id final TestServiceLocator2 factory = (TestServiceLocator2) ctx.getBean("factory"); TestService testBean = factory.getTestService(null); // now test with explicit id testBean = factory.getTestService("testService"); // now verify failure on bad id new AssertThrows(NoSuchBeanDefinitionException.class, "Illegal operation allowed") { public void test() throws Exception { factory.getTestService("bogusTestService"); } }.runTest(); }