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 2005/09/08 20:25:45 UTC
svn commit: r279597 - in /jakarta/tapestry/trunk: ./
framework/src/java/org/apache/tapestry/bean/
framework/src/test/org/apache/tapestry/
framework/src/test/org/apache/tapestry/bean/
framework/src/test/org/apache/tapestry/components/
Author: hlship
Date: Thu Sep 8 11:25:38 2005
New Revision: 279597
URL: http://svn.apache.org/viewcvs?rev=279597&view=rev
Log:
TAPESTRY-341: Report location of errors initializing managed beans
Added:
jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/bean/TestBeanProvider.java
Removed:
jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/bean/StaticBeanInitializer.java
Modified:
jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/bean/BeanMessages.java
jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/bean/BeanProvider.java
jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/bean/BeanStrings.properties
jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/BaseComponentTestCase.java
jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/components/TestBlock.java
jakarta/tapestry/trunk/status.xml
Modified: jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/bean/BeanMessages.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/bean/BeanMessages.java?rev=279597&r1=279596&r2=279597&view=diff
==============================================================================
--- jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/bean/BeanMessages.java (original)
+++ jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/bean/BeanMessages.java Thu Sep 8 11:25:38 2005
@@ -41,4 +41,11 @@
return _formatter.format("instantiation-error", new Object[]
{ name, component.getExtendedId(), className, cause });
}
+
+ static String initializationError(IComponent component, String beanName, String propertyName,
+ Throwable cause)
+ {
+ return _formatter.format("initialization-error", new Object[]
+ { propertyName, beanName, component.getExtendedId(), cause });
+ }
}
Modified: jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/bean/BeanProvider.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/bean/BeanProvider.java?rev=279597&r1=279596&r2=279597&view=diff
==============================================================================
--- jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/bean/BeanProvider.java (original)
+++ jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/bean/BeanProvider.java Thu Sep 8 11:25:38 2005
@@ -176,7 +176,7 @@
return bean;
}
- private Object instantiateBean(String beanName, IBeanSpecification spec)
+ Object instantiateBean(String beanName, IBeanSpecification spec)
{
String className = spec.getClassName();
Object bean = null;
@@ -198,7 +198,7 @@
beanName,
_component,
className,
- ex), spec.getLocation(), ex);
+ ex), _component, spec.getLocation(), ex);
}
// OK, have the bean, have to initialize it.
@@ -216,7 +216,19 @@
if (LOG.isDebugEnabled())
LOG.debug("Initializing property " + iz.getPropertyName());
- iz.setBeanProperty(this, bean);
+ try
+ {
+ iz.setBeanProperty(this, bean);
+ }
+ catch (Exception ex)
+ {
+ throw new ApplicationRuntimeException(BeanMessages.initializationError(
+ _component,
+ beanName,
+ iz.getPropertyName(),
+ ex), bean, iz.getLocation(), ex);
+
+ }
}
return bean;
Modified: jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/bean/BeanStrings.properties
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/bean/BeanStrings.properties?rev=279597&r1=279596&r2=279597&view=diff
==============================================================================
--- jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/bean/BeanStrings.properties (original)
+++ jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/bean/BeanStrings.properties Thu Sep 8 11:25:38 2005
@@ -15,3 +15,4 @@
property-initializer-name=initializer of property {0}
bean-not-defined=Component {0} does not define a bean name {1}.
instantiation-error=Unable to instantiate bean ''{0}'' (for component {1}) as class {2}: {3}
+initialization-error=Error initializing property {0} of bean ''{1}'' (of component {2}): {3}
\ No newline at end of file
Modified: jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/BaseComponentTestCase.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/BaseComponentTestCase.java?rev=279597&r1=279596&r2=279597&view=diff
==============================================================================
--- jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/BaseComponentTestCase.java (original)
+++ jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/BaseComponentTestCase.java Thu Sep 8 11:25:38 2005
@@ -17,6 +17,8 @@
import java.io.CharArrayWriter;
import java.io.PrintWriter;
+import org.apache.hivemind.ClassResolver;
+import org.apache.hivemind.Locatable;
import org.apache.hivemind.Location;
import org.apache.hivemind.test.HiveMindTestCase;
import org.apache.tapestry.markup.AsciiMarkupFilter;
@@ -285,6 +287,46 @@
protected IAsset newAsset()
{
return (IAsset) newMock(IAsset.class);
+ }
+
+ protected IEngine newEngine(ClassResolver resolver)
+ {
+ IEngine engine = (IEngine) newMock(IEngine.class);
+
+ engine.getClassResolver();
+ getControl(engine).setReturnValue(resolver);
+
+ return engine;
+ }
+
+ protected void trainGetEngine(IPage page, IEngine engine)
+ {
+ page.getEngine();
+
+ getControl(page).setReturnValue(engine);
+ }
+
+ protected IComponent newComponent()
+ {
+ return (IComponent) newMock(IComponent.class);
+ }
+
+ protected void trainGetPage(IComponent component, IPage page)
+ {
+ component.getPage();
+ getControl(component).setReturnValue(page);
+ }
+
+ protected void trainGetExtendedId(IComponent component, String extendedId)
+ {
+ component.getExtendedId();
+ getControl(component).setReturnValue(extendedId);
+ }
+
+ protected void trainGetLocation(Locatable locatable, Location location)
+ {
+ locatable.getLocation();
+ getControl(locatable).setReturnValue(location);
}
}
Added: jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/bean/TestBeanProvider.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/bean/TestBeanProvider.java?rev=279597&view=auto
==============================================================================
--- jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/bean/TestBeanProvider.java (added)
+++ jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/bean/TestBeanProvider.java Thu Sep 8 11:25:38 2005
@@ -0,0 +1,170 @@
+// Copyright 2005 The Apache Software Foundation
+//
+// Licensed 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.tapestry.bean;
+
+import org.apache.hivemind.ApplicationRuntimeException;
+import org.apache.hivemind.ClassResolver;
+import org.apache.hivemind.Location;
+import org.apache.hivemind.impl.DefaultClassResolver;
+import org.apache.tapestry.BaseComponentTestCase;
+import org.apache.tapestry.IBeanProvider;
+import org.apache.tapestry.IComponent;
+import org.apache.tapestry.IEngine;
+import org.apache.tapestry.IPage;
+import org.apache.tapestry.spec.BeanSpecification;
+import org.apache.tapestry.spec.IBeanSpecification;
+
+/**
+ * Tests for {@link org.apache.tapestry.bean.BeanProvider} (mostly new features added in release
+ * 4.0).
+ *
+ * @author Howard M. Lewis Ship
+ * @since 4.0
+ */
+public class TestBeanProvider extends BaseComponentTestCase
+{
+ public static class BeanInitializerFixture extends AbstractBeanInitializer
+ {
+ private final RuntimeException _exception;
+
+ public BeanInitializerFixture(String propertyName, RuntimeException exception)
+ {
+ setPropertyName(propertyName);
+ _exception = exception;
+ }
+
+ public void setBeanProperty(IBeanProvider provider, Object bean)
+ {
+ throw _exception;
+ }
+
+ }
+
+ protected IBeanSpecification newBeanSpec()
+ {
+ return (IBeanSpecification) newMock(IBeanSpecification.class);
+ }
+
+ protected void trainGetClassName(IBeanSpecification spec, String className)
+ {
+ spec.getClassName();
+ getControl(spec).setReturnValue(className);
+ }
+
+ public void testInstantiateFailure()
+ {
+ ClassResolver resolver = newResolver();
+ IEngine engine = newEngine(resolver);
+ IPage page = newPage();
+ IComponent component = newComponent();
+
+ trainGetPage(component, page);
+ trainGetEngine(page, engine);
+
+ replayControls();
+
+ BeanProvider bp = new BeanProvider(component);
+
+ verifyControls();
+
+ IBeanSpecification bs = newBeanSpec();
+
+ trainGetClassName(bs, "org.foo.Bar");
+
+ Throwable t = new RuntimeException("Poof!");
+
+ resolver.findClass("org.foo.Bar");
+ getControl(resolver).setThrowable(t);
+
+ trainGetExtendedId(component, "Fred/barney");
+
+ Location l = newLocation();
+
+ trainGetLocation(bs, l);
+
+ replayControls();
+
+ try
+ {
+ bp.instantiateBean("wilma", bs);
+ unreachable();
+ }
+ catch (ApplicationRuntimeException ex)
+ {
+ assertEquals(
+ "Unable to instantiate bean 'wilma' (for component Fred/barney) as class org.foo.Bar: Poof!",
+ ex.getMessage());
+ assertSame(component, ex.getComponent());
+ assertSame(l, ex.getLocation());
+ assertSame(t, ex.getRootCause());
+ }
+
+ verifyControls();
+ }
+
+ private ClassResolver newResolver()
+ {
+ return (ClassResolver) newMock(ClassResolver.class);
+ }
+
+ public void testInitializeFailure()
+ {
+ ClassResolver resolver = new DefaultClassResolver();
+ IEngine engine = newEngine(resolver);
+ IPage page = newPage();
+ IComponent component = newComponent();
+
+ trainGetPage(component, page);
+ trainGetEngine(page, engine);
+
+ replayControls();
+
+ BeanProvider bp = new BeanProvider(component);
+
+ verifyControls();
+
+ IBeanSpecification spec = new BeanSpecification();
+ spec.setClassName(TargetBean.class.getName());
+
+ RuntimeException t = new RuntimeException("Blat!");
+
+ Location l = newLocation();
+
+ IBeanInitializer bi = new BeanInitializerFixture("foo", t);
+ bi.setLocation(l);
+
+ spec.addInitializer(bi);
+
+ trainGetExtendedId(component, "Fred/barney");
+
+ replayControls();
+
+ try
+ {
+ bp.instantiateBean("wilma", spec);
+ unreachable();
+ }
+ catch (ApplicationRuntimeException ex)
+ {
+ assertEquals(
+ "Error initializing property foo of bean 'wilma' (of component Fred/barney): Blat!",
+ ex.getMessage());
+ assertSame(TargetBean.class, ex.getComponent().getClass());
+ assertSame(l, ex.getLocation());
+ assertSame(t, ex.getRootCause());
+ }
+
+ }
+}
Modified: jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/components/TestBlock.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/components/TestBlock.java?rev=279597&r1=279596&r2=279597&view=diff
==============================================================================
--- jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/components/TestBlock.java (original)
+++ jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/components/TestBlock.java Thu Sep 8 11:25:38 2005
@@ -84,9 +84,4 @@
verifyControls();
}
- private IComponent newComponent()
- {
- return (IComponent) newMock(IComponent.class);
- }
-
}
Modified: jakarta/tapestry/trunk/status.xml
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/status.xml?rev=279597&r1=279596&r2=279597&view=diff
==============================================================================
--- jakarta/tapestry/trunk/status.xml (original)
+++ jakarta/tapestry/trunk/status.xml Thu Sep 8 11:25:38 2005
@@ -51,7 +51,7 @@
</todo>
<changes>
<release version="4.0-beta-7" date="unreleased">
-
+ <action type="fix" dev="HLS" fixes-bug="TAPESTRY-341">Report location of errors initializing managed beans</action>
</release>
<release version="4.0-beta-6" date="Sep 7 2005">
<action type="update" dev="HLS" due-to="Henri Yandell">Convert Tapestry repository from CVS to SVN</action>
---------------------------------------------------------------------
To unsubscribe, e-mail: tapestry-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tapestry-dev-help@jakarta.apache.org