You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by hl...@apache.org on 2006/09/18 18:54:05 UTC
svn commit: r447468 - in /tapestry/tapestry5/tapestry-core/trunk/src:
main/java/org/apache/tapestry/internal/services/
main/resources/org/apache/tapestry/internal/services/
test/java/org/apache/tapestry/internal/services/
Author: hlship
Date: Mon Sep 18 09:54:04 2006
New Revision: 447468
URL: http://svn.apache.org/viewvc?view=rev&rev=447468
Log:
Make BindingSourceImpl consolidate exceptions thrown from binding factories.
Modified:
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/BindingSourceImpl.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ServicesMessages.java
tapestry/tapestry5/tapestry-core/trunk/src/main/resources/org/apache/tapestry/internal/services/ServicesStrings.properties
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/BindingSourceImplTest.java
Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/BindingSourceImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/BindingSourceImpl.java?view=diff&rev=447468&r1=447467&r2=447468
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/BindingSourceImpl.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/BindingSourceImpl.java Mon Sep 18 09:54:04 2006
@@ -19,6 +19,7 @@
import org.apache.tapestry.Binding;
import org.apache.tapestry.ComponentResources;
import org.apache.tapestry.Location;
+import org.apache.tapestry.internal.TapestryException;
import org.apache.tapestry.internal.annotations.SuppressNullCheck;
import org.apache.tapestry.services.BindingFactory;
import org.apache.tapestry.services.BindingSource;
@@ -63,8 +64,17 @@
if (factory == null)
factory = _factories.get(defaultPrefix);
- // And if that's null, what then?
+ // And if that's null, what then? We assume that the default prefix is a valid prefix,
+ // or we'll get an NPE below and report it like any other error.
- return factory.newBinding(description, component, subexpression, location);
+ try
+ {
+ return factory.newBinding(description, component, subexpression, location);
+ }
+ catch (Exception ex)
+ {
+ throw new TapestryException(ServicesMessages.bindingSourceFailure(expression, ex),
+ location, ex);
+ }
}
}
Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ServicesMessages.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ServicesMessages.java?view=diff&rev=447468&r1=447467&r2=447468
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ServicesMessages.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ServicesMessages.java Mon Sep 18 09:54:04 2006
@@ -172,4 +172,9 @@
IOCUtilities.joinSorted(ids),
componentClassName);
}
+
+ static String bindingSourceFailure(String expression, Throwable cause)
+ {
+ return MESSAGES.format("binding-source-failure", expression, cause);
+ }
}
Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/resources/org/apache/tapestry/internal/services/ServicesStrings.properties
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/resources/org/apache/tapestry/internal/services/ServicesStrings.properties?view=diff&rev=447468&r1=447467&r2=447468
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/resources/org/apache/tapestry/internal/services/ServicesStrings.properties (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/resources/org/apache/tapestry/internal/services/ServicesStrings.properties Mon Sep 18 09:54:04 2006
@@ -45,4 +45,5 @@
You should not provide a type attribute in the template when defining an embedded component within the component class.
no-type-for-embedded-component=Embedded component '%s' has no type. You should specify a type in the component template, \
or define the component inside class %s using the @Component annotation on a private instance variable.
-embedded-components-not-in-template=Embedded component(s) %s are defined within component class %s, but are not present in the component template.
\ No newline at end of file
+embedded-components-not-in-template=Embedded component(s) %s are defined within component class %s, but are not present in the component template.
+binding-source-failure=Could not convert '%s' into a component parameter binding: %s
\ No newline at end of file
Modified: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/BindingSourceImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/BindingSourceImplTest.java?view=diff&rev=447468&r1=447467&r2=447468
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/BindingSourceImplTest.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/BindingSourceImplTest.java Mon Sep 18 09:54:04 2006
@@ -19,6 +19,7 @@
import org.apache.tapestry.Binding;
import org.apache.tapestry.ComponentResources;
import org.apache.tapestry.Location;
+import org.apache.tapestry.internal.TapestryException;
import org.apache.tapestry.internal.test.InternalBaseTestCase;
import org.apache.tapestry.services.BindingFactory;
import org.apache.tapestry.services.BindingSource;
@@ -119,6 +120,45 @@
l);
assertSame(actual, binding);
+
+ verify();
+ }
+
+ @Test
+ public void factory_throws_exception()
+ {
+ BindingFactory factory = newBindingFactory();
+ ComponentResources component = newComponentResources();
+ Location l = newLocation();
+ Throwable t = new RuntimeException("Simulated failure.");
+
+ String defaultPrefix = "def";
+ String description = "descrip";
+ String expression = "full expression";
+
+ factory.newBinding(description, component, expression, l);
+ setThrowable(t);
+
+ replay();
+
+ Map<String, BindingFactory> map = newMap();
+
+ map.put(defaultPrefix, factory);
+
+ BindingSource source = new BindingSourceImpl(map);
+
+ try
+ {
+ source.newBinding(description, component, defaultPrefix, expression, l);
+ unreachable();
+ }
+ catch (TapestryException ex)
+ {
+ assertTrue(ex.getMessage().contains("Could not convert 'full expression' into a component parameter binding"));
+ assertTrue(ex.getMessage().contains(t.getMessage()));
+ assertSame(ex.getLocation(), l);
+ assertSame(ex.getCause(), t);
+ }
verify();
}