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();
     }