You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2013/07/04 17:06:22 UTC
svn commit: r1499778 - in /tomcat/trunk:
java/javax/el/BeanNameELResolver.java
test/javax/el/TestBeanNameELResolver.java
test/javax/el/TesterBeanNameResolver.java
Author: markt
Date: Thu Jul 4 15:06:21 2013
New Revision: 1499778
URL: http://svn.apache.org/r1499778
Log:
More unit tests for BeanNameELResolver and fix an exception handling problem identified by the new tests.
Modified:
tomcat/trunk/java/javax/el/BeanNameELResolver.java
tomcat/trunk/test/javax/el/TestBeanNameELResolver.java
tomcat/trunk/test/javax/el/TesterBeanNameResolver.java
Modified: tomcat/trunk/java/javax/el/BeanNameELResolver.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/javax/el/BeanNameELResolver.java?rev=1499778&r1=1499777&r2=1499778&view=diff
==============================================================================
--- tomcat/trunk/java/javax/el/BeanNameELResolver.java (original)
+++ tomcat/trunk/java/javax/el/BeanNameELResolver.java Thu Jul 4 15:06:21 2013
@@ -43,8 +43,14 @@ public class BeanNameELResolver extends
String beanName = (String) property;
if (beanNameResolver.isNameResolved(beanName)) {
- context.setPropertyResolved(true);
- return beanNameResolver.getBean((String) property);
+ try {
+ Object result = beanNameResolver.getBean((String) property);
+ context.setPropertyResolved(true);
+ return result;
+ } catch (Throwable t) {
+ Util.handleThrowable(t);
+ throw new ELException(t);
+ }
}
return null;
Modified: tomcat/trunk/test/javax/el/TestBeanNameELResolver.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/javax/el/TestBeanNameELResolver.java?rev=1499778&r1=1499777&r2=1499778&view=diff
==============================================================================
--- tomcat/trunk/test/javax/el/TestBeanNameELResolver.java (original)
+++ tomcat/trunk/test/javax/el/TestBeanNameELResolver.java Thu Jul 4 15:06:21 2013
@@ -25,6 +25,7 @@ public class TestBeanNameELResolver {
private static final TesterBean BEAN01 = new TesterBean(BEAN01_NAME);
private static final String BEAN02_NAME = "bean02";
private static final TesterBean BEAN02 = new TesterBean(BEAN02_NAME);
+ private static final String BEAN99_NAME = "bean99";
/**
* Creates the resolver that is used for the test. All the tests use a
@@ -65,6 +66,104 @@ public class TestBeanNameELResolver {
Object result = resolver.getValue(context, null, BEAN01_NAME);
Assert.assertEquals(BEAN01, result);
+ Assert.assertTrue(context.isPropertyResolved());
}
+
+ /**
+ * Tests that a valid bean is not resolved if base is non-null.
+ */
+ @Test
+ public void testGetValue03() {
+
+ BeanNameELResolver resolver = createBeanNameELResolver();
+ ELContext context =
+ new StandardELContext(ELManager.getExpressionFactory());
+
+ Object result = resolver.getValue(context, new Object(), BEAN01_NAME);
+
+ Assert.assertNull(result);
+ Assert.assertFalse(context.isPropertyResolved());
+ }
+
+
+ /**
+ * Tests that a valid bean is not resolved if property is not a String even
+ * if it can be coerced to a valid bean name.
+ */
+ @Test
+ public void testGetValue04() {
+
+ BeanNameELResolver resolver = createBeanNameELResolver();
+ ELContext context =
+ new StandardELContext(ELManager.getExpressionFactory());
+
+ Object property = new Object() {
+ @Override
+ public String toString() {
+ return BEAN01_NAME;
+ }
+ };
+
+ Object result = resolver.getValue(context, null, property);
+
+ Assert.assertNull(result);
+ Assert.assertFalse(context.isPropertyResolved());
+ }
+
+
+ /**
+ * Beans that don't exist shouldn't return anything
+ */
+ @Test
+ public void testGetValue05() {
+
+ BeanNameELResolver resolver = createBeanNameELResolver();
+ ELContext context =
+ new StandardELContext(ELManager.getExpressionFactory());
+
+ Object result = resolver.getValue(context, null, BEAN99_NAME);
+
+ Assert.assertNull(result);
+ Assert.assertFalse(context.isPropertyResolved());
+ }
+
+
+ /**
+ * Exception during resolution should be wrapped and re-thrown.
+ */
+ @Test
+ public void testGetValue06() {
+ doGetValueThrowableTest(TesterBeanNameResolver.EXCEPTION_TRIGGER_NAME);
+ }
+
+
+ /**
+ * Throwable during resolution should be wrapped and re-thrown.
+ */
+ @Test
+ public void testGetValue07() {
+ doGetValueThrowableTest(TesterBeanNameResolver.THROWABLE_TRIGGER_NAME);
+ }
+
+
+ private void doGetValueThrowableTest(String trigger) {
+ BeanNameELResolver resolver = createBeanNameELResolver();
+ ELContext context =
+ new StandardELContext(ELManager.getExpressionFactory());
+
+ ELException elException = null;
+ try {
+ resolver.getValue(context, null,trigger);
+ } catch (ELException e) {
+ elException = e;
+ }
+
+ Assert.assertFalse(context.isPropertyResolved());
+ Assert.assertNotNull(elException);
+
+ @SuppressWarnings("null") // Can't be null due to assertion above
+ Throwable cause = elException.getCause();
+ Assert.assertNotNull(cause);
+ }
}
Modified: tomcat/trunk/test/javax/el/TesterBeanNameResolver.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/javax/el/TesterBeanNameResolver.java?rev=1499778&r1=1499777&r2=1499778&view=diff
==============================================================================
--- tomcat/trunk/test/javax/el/TesterBeanNameResolver.java (original)
+++ tomcat/trunk/test/javax/el/TesterBeanNameResolver.java Thu Jul 4 15:06:21 2013
@@ -21,12 +21,18 @@ import java.util.Map;
public class TesterBeanNameResolver extends BeanNameResolver {
+ public static final String EXCEPTION_TRIGGER_NAME = "exception";
+ public static final String THROWABLE_TRIGGER_NAME = "exception";
+
private Map<String,Object> beans = new HashMap<>();
+ public TesterBeanNameResolver() {
+ beans.put(EXCEPTION_TRIGGER_NAME, new Object());
+ }
+
@Override
public void setBeanValue(String beanName, Object value)
throws PropertyNotWritableException {
-
beans.put(beanName, value);
}
@@ -37,6 +43,12 @@ public class TesterBeanNameResolver exte
@Override
public Object getBean(String beanName) {
+ if (EXCEPTION_TRIGGER_NAME.equals(beanName)) {
+ throw new RuntimeException();
+ }
+ if (THROWABLE_TRIGGER_NAME.equals(beanName)) {
+ throw new Error();
+ }
return beans.get(beanName);
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org