You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by mg...@apache.org on 2014/08/28 11:03:59 UTC

[2/2] git commit: WICKET-5686 @Inject should require the bean dependency instead of setting null

WICKET-5686 @Inject should require the bean dependency instead of setting null

Make fields annotated with @Inject required (Spring)


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/ee4ebba6
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/ee4ebba6
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/ee4ebba6

Branch: refs/heads/wicket-6.x
Commit: ee4ebba656ceaa3f55f74158e681a4b46b339c74
Parents: 594d36e
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Thu Aug 28 11:04:08 2014 +0300
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Thu Aug 28 12:02:42 2014 +0300

----------------------------------------------------------------------
 .../annot/AnnotProxyFieldValueFactory.java      |  3 +-
 .../annot/AnnotProxyFieldValueFactoryTest.java  | 22 ++-----
 ...axInjectAnnotProxyFieldValueFactoryTest.java | 29 +++++++-
 ...ringBeanAnnotProxyFieldValueFactoryTest.java | 34 ++++++++++
 .../spring/injection/util/Injectable.java       | 64 ------------------
 .../injection/util/JavaxInjectInjectable.java   | 69 ++++++++++++++++++++
 .../spring/injection/util/JavaxInjectable.java  | 66 -------------------
 .../injection/util/SpringBeanInjectable.java    | 63 ++++++++++++++++++
 8 files changed, 201 insertions(+), 149 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/ee4ebba6/wicket-spring/src/main/java/org/apache/wicket/spring/injection/annot/AnnotProxyFieldValueFactory.java
----------------------------------------------------------------------
diff --git a/wicket-spring/src/main/java/org/apache/wicket/spring/injection/annot/AnnotProxyFieldValueFactory.java b/wicket-spring/src/main/java/org/apache/wicket/spring/injection/annot/AnnotProxyFieldValueFactory.java
index a81e2fa..30eb87b 100644
--- a/wicket-spring/src/main/java/org/apache/wicket/spring/injection/annot/AnnotProxyFieldValueFactory.java
+++ b/wicket-spring/src/main/java/org/apache/wicket/spring/injection/annot/AnnotProxyFieldValueFactory.java
@@ -68,6 +68,7 @@ import org.springframework.context.support.AbstractApplicationContext;
  * @see LazyInitProxyFactory
  * @see SpringBean
  * @see SpringBeanLocator
+ * @see javax.inject.Inject
  * 
  * @author Igor Vaynberg (ivaynberg)
  * @author Istvan Devai
@@ -123,7 +124,7 @@ public class AnnotProxyFieldValueFactory implements IFieldValueFactory
 			{
 				Named named = field.getAnnotation(Named.class);
 				name = named != null ? named.value() : "";
-				required = false;
+				required = true;
 			}
 
 			String beanName = getBeanName(field, name, required);

http://git-wip-us.apache.org/repos/asf/wicket/blob/ee4ebba6/wicket-spring/src/test/java/org/apache/wicket/spring/injection/annot/AnnotProxyFieldValueFactoryTest.java
----------------------------------------------------------------------
diff --git a/wicket-spring/src/test/java/org/apache/wicket/spring/injection/annot/AnnotProxyFieldValueFactoryTest.java b/wicket-spring/src/test/java/org/apache/wicket/spring/injection/annot/AnnotProxyFieldValueFactoryTest.java
index a8b9122..8e38abf 100644
--- a/wicket-spring/src/test/java/org/apache/wicket/spring/injection/annot/AnnotProxyFieldValueFactoryTest.java
+++ b/wicket-spring/src/test/java/org/apache/wicket/spring/injection/annot/AnnotProxyFieldValueFactoryTest.java
@@ -23,7 +23,6 @@ import org.apache.wicket.spring.ISpringContextLocator;
 import org.apache.wicket.spring.SpringBeanLocator;
 import org.apache.wicket.spring.injection.util.Bean;
 import org.apache.wicket.spring.injection.util.Bean2;
-import org.apache.wicket.spring.injection.util.Injectable;
 import org.apache.wicket.spring.injection.util.InjectableInterface;
 import org.apache.wicket.spring.test.ApplicationContextMock;
 import org.junit.Assert;
@@ -34,9 +33,8 @@ import org.springframework.context.ApplicationContext;
  * Tests for BeanAnnotLocatorFactory
  * 
  * @author igor
- * 
  */
-public class AnnotProxyFieldValueFactoryTest extends Assert
+public abstract class AnnotProxyFieldValueFactoryTest extends Assert
 {
 	ISpringContextLocator mockCtxLocator = new ISpringContextLocator()
 	{
@@ -52,23 +50,15 @@ public class AnnotProxyFieldValueFactoryTest extends Assert
 		}
 	};
 
-	final InjectableInterface obj;
+	protected final InjectableInterface obj;
 
-	/**
-	 * Construct.
-	 */
-	public AnnotProxyFieldValueFactoryTest()
-	{
-		this(new Injectable());
-	}
+	protected final AnnotProxyFieldValueFactory factory = new AnnotProxyFieldValueFactory(mockCtxLocator);
 
 	protected AnnotProxyFieldValueFactoryTest(InjectableInterface injectable)
 	{
 		obj = injectable;
 	}
 
-	AnnotProxyFieldValueFactory factory = new AnnotProxyFieldValueFactory(mockCtxLocator);
-
 	/**
 	 * Test the factory
 	 * 
@@ -77,8 +67,8 @@ public class AnnotProxyFieldValueFactoryTest extends Assert
 	@Test
 	public void testFactory() throws Exception
 	{
-		SpringBeanLocator locator = null;
-		Object proxy = null;
+		SpringBeanLocator locator;
+		Object proxy;
 
 		Field field = obj.getClass().getDeclaredField("nobean");
 		proxy = factory.getFieldValue(field, obj);
@@ -157,6 +147,8 @@ public class AnnotProxyFieldValueFactoryTest extends Assert
 		}
 		catch (RuntimeException e)
 		{
+			// expected
+			assertTrue(true);
 		}
 	}
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/ee4ebba6/wicket-spring/src/test/java/org/apache/wicket/spring/injection/annot/JavaxInjectAnnotProxyFieldValueFactoryTest.java
----------------------------------------------------------------------
diff --git a/wicket-spring/src/test/java/org/apache/wicket/spring/injection/annot/JavaxInjectAnnotProxyFieldValueFactoryTest.java b/wicket-spring/src/test/java/org/apache/wicket/spring/injection/annot/JavaxInjectAnnotProxyFieldValueFactoryTest.java
index 47e3772..6d3d9cc 100644
--- a/wicket-spring/src/test/java/org/apache/wicket/spring/injection/annot/JavaxInjectAnnotProxyFieldValueFactoryTest.java
+++ b/wicket-spring/src/test/java/org/apache/wicket/spring/injection/annot/JavaxInjectAnnotProxyFieldValueFactoryTest.java
@@ -16,11 +16,14 @@
  */
 package org.apache.wicket.spring.injection.annot;
 
-import org.apache.wicket.spring.injection.util.JavaxInjectable;
+import java.lang.reflect.Field;
+
+import org.apache.wicket.spring.injection.util.JavaxInjectInjectable;
+import org.junit.Test;
 
 
 /**
- * Tests for javax.inject.Inject when used with spring
+ * Tests for Spring injection with {@literal @javax.inject.Inject} annotation
  */
 public class JavaxInjectAnnotProxyFieldValueFactoryTest extends AnnotProxyFieldValueFactoryTest
 {
@@ -29,6 +32,26 @@ public class JavaxInjectAnnotProxyFieldValueFactoryTest extends AnnotProxyFieldV
 	 */
 	public JavaxInjectAnnotProxyFieldValueFactoryTest()
 	{
-		super(new JavaxInjectable());
+		super(new JavaxInjectInjectable());
+	}
+
+	/**
+	 * https://issues.apache.org/jira/browse/WICKET-5686
+	 * @throws Exception
+	 */
+	@Test
+	public void required() throws Exception
+	{
+		Field field = obj.getClass().getDeclaredField("nonExisting");
+		try
+		{
+			factory.getFieldValue(field, obj);
+			fail("Fields annotated with @Inject are required!");
+		}
+		catch (IllegalStateException isx)
+		{
+			// expected
+			assertTrue(true);
+		}
 	}
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/ee4ebba6/wicket-spring/src/test/java/org/apache/wicket/spring/injection/annot/SpringBeanAnnotProxyFieldValueFactoryTest.java
----------------------------------------------------------------------
diff --git a/wicket-spring/src/test/java/org/apache/wicket/spring/injection/annot/SpringBeanAnnotProxyFieldValueFactoryTest.java b/wicket-spring/src/test/java/org/apache/wicket/spring/injection/annot/SpringBeanAnnotProxyFieldValueFactoryTest.java
new file mode 100644
index 0000000..424073b
--- /dev/null
+++ b/wicket-spring/src/test/java/org/apache/wicket/spring/injection/annot/SpringBeanAnnotProxyFieldValueFactoryTest.java
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.spring.injection.annot;
+
+import org.apache.wicket.spring.injection.util.SpringBeanInjectable;
+
+
+/**
+ * Tests for Spring injections with {@literal @SpringBean} annotation
+ */
+public class SpringBeanAnnotProxyFieldValueFactoryTest extends AnnotProxyFieldValueFactoryTest
+{
+	/**
+	 * Construct.
+	 */
+	public SpringBeanAnnotProxyFieldValueFactoryTest()
+	{
+		super(new SpringBeanInjectable());
+	}
+}

http://git-wip-us.apache.org/repos/asf/wicket/blob/ee4ebba6/wicket-spring/src/test/java/org/apache/wicket/spring/injection/util/Injectable.java
----------------------------------------------------------------------
diff --git a/wicket-spring/src/test/java/org/apache/wicket/spring/injection/util/Injectable.java b/wicket-spring/src/test/java/org/apache/wicket/spring/injection/util/Injectable.java
deleted file mode 100644
index 7f5c61d..0000000
--- a/wicket-spring/src/test/java/org/apache/wicket/spring/injection/util/Injectable.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.wicket.spring.injection.util;
-
-import org.apache.wicket.spring.injection.annot.SpringBean;
-
-/**
- * Mock for an object with some SpringBean annotations
- * 
- * @author Igor Vaynberg (ivaynberg)
- * 
- */
-public class Injectable implements InjectableInterface
-{
-	private Bean nobean;
-
-	@SpringBean
-	private Bean beanByClass;
-
-	@SpringBean(name = "somebean")
-	private Bean2 beanByName;
-
-	/**
-	 * @return test bean
-	 */
-	@Override
-	public Bean getBeanByClass()
-	{
-		return beanByClass;
-	}
-
-	/**
-	 * @return test bean
-	 */
-	@Override
-	public Bean2 getBeanByName()
-	{
-		return beanByName;
-	}
-
-	/**
-	 * @return test bean
-	 */
-	@Override
-	public Bean getNobean()
-	{
-		return nobean;
-	}
-
-}

http://git-wip-us.apache.org/repos/asf/wicket/blob/ee4ebba6/wicket-spring/src/test/java/org/apache/wicket/spring/injection/util/JavaxInjectInjectable.java
----------------------------------------------------------------------
diff --git a/wicket-spring/src/test/java/org/apache/wicket/spring/injection/util/JavaxInjectInjectable.java b/wicket-spring/src/test/java/org/apache/wicket/spring/injection/util/JavaxInjectInjectable.java
new file mode 100644
index 0000000..0f378fc
--- /dev/null
+++ b/wicket-spring/src/test/java/org/apache/wicket/spring/injection/util/JavaxInjectInjectable.java
@@ -0,0 +1,69 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.spring.injection.util;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+
+/**
+ * Mock for an object with some SpringBean annotations
+ *
+ * @author Igor Vaynberg (ivaynberg)
+ *
+ */
+public class JavaxInjectInjectable implements InjectableInterface
+{
+	private Bean nobean;
+
+	@Inject
+	private Bean beanByClass;
+
+	@Inject
+	@Named("somebean")
+	private Bean2 beanByName;
+
+	@Inject
+	private String nonExisting;
+
+	/**
+	 * @return test bean
+	 */
+	@Override
+	public Bean getBeanByClass()
+	{
+		return beanByClass;
+	}
+
+	/**
+	 * @return test bean
+	 */
+	@Override
+	public Bean2 getBeanByName()
+	{
+		return beanByName;
+	}
+
+	/**
+	 * @return test bean
+	 */
+	@Override
+	public Bean getNobean()
+	{
+		return nobean;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/wicket/blob/ee4ebba6/wicket-spring/src/test/java/org/apache/wicket/spring/injection/util/JavaxInjectable.java
----------------------------------------------------------------------
diff --git a/wicket-spring/src/test/java/org/apache/wicket/spring/injection/util/JavaxInjectable.java b/wicket-spring/src/test/java/org/apache/wicket/spring/injection/util/JavaxInjectable.java
deleted file mode 100644
index 2ac5767..0000000
--- a/wicket-spring/src/test/java/org/apache/wicket/spring/injection/util/JavaxInjectable.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.wicket.spring.injection.util;
-
-import javax.inject.Inject;
-import javax.inject.Named;
-
-/**
- * Mock for an object with some SpringBean annotations
- * 
- * @author Igor Vaynberg (ivaynberg)
- * 
- */
-public class JavaxInjectable implements InjectableInterface
-{
-	private Bean nobean;
-
-	@Inject
-	private Bean beanByClass;
-
-	@Inject
-	@Named("somebean")
-	private Bean2 beanByName;
-
-	/**
-	 * @return test bean
-	 */
-	@Override
-	public Bean getBeanByClass()
-	{
-		return beanByClass;
-	}
-
-	/**
-	 * @return test bean
-	 */
-	@Override
-	public Bean2 getBeanByName()
-	{
-		return beanByName;
-	}
-
-	/**
-	 * @return test bean
-	 */
-	@Override
-	public Bean getNobean()
-	{
-		return nobean;
-	}
-
-}

http://git-wip-us.apache.org/repos/asf/wicket/blob/ee4ebba6/wicket-spring/src/test/java/org/apache/wicket/spring/injection/util/SpringBeanInjectable.java
----------------------------------------------------------------------
diff --git a/wicket-spring/src/test/java/org/apache/wicket/spring/injection/util/SpringBeanInjectable.java b/wicket-spring/src/test/java/org/apache/wicket/spring/injection/util/SpringBeanInjectable.java
new file mode 100644
index 0000000..f13329d
--- /dev/null
+++ b/wicket-spring/src/test/java/org/apache/wicket/spring/injection/util/SpringBeanInjectable.java
@@ -0,0 +1,63 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.spring.injection.util;
+
+import org.apache.wicket.spring.injection.annot.SpringBean;
+
+/**
+ * Mock for an object with some SpringBean annotations
+ *
+ * @author Igor Vaynberg (ivaynberg)
+ */
+public class SpringBeanInjectable implements InjectableInterface
+{
+	private Bean nobean;
+
+	@SpringBean
+	private Bean beanByClass;
+
+	@SpringBean(name = "somebean")
+	private Bean2 beanByName;
+
+	/**
+	 * @return test bean
+	 */
+	@Override
+	public Bean getBeanByClass()
+	{
+		return beanByClass;
+	}
+
+	/**
+	 * @return test bean
+	 */
+	@Override
+	public Bean2 getBeanByName()
+	{
+		return beanByName;
+	}
+
+	/**
+	 * @return test bean
+	 */
+	@Override
+	public Bean getNobean()
+	{
+		return nobean;
+	}
+
+}