- Revision
- 351
- Author
- mauro
- Date
- 2007-11-12 12:42:31 -0600 (Mon, 12 Nov 2007)
Log Message
Added monitoring for bind components.
Modified Paths
- trunk/core/src/main/java/org/codehaus/waffle/ComponentRegistry.java
- trunk/core/src/main/java/org/codehaus/waffle/bind/IntrospectingRequestAttributeBinder.java
- trunk/core/src/main/java/org/codehaus/waffle/bind/OgnlDataBinder.java
- trunk/core/src/main/java/org/codehaus/waffle/bind/OgnlTypeConverter.java
- trunk/core/src/main/java/org/codehaus/waffle/bind/RequestAttributeBinder.java
- trunk/core/src/main/java/org/codehaus/waffle/bind/RubyDataBinder.java
- trunk/core/src/main/java/org/codehaus/waffle/context/pico/PicoComponentRegistry.java
- trunk/core/src/main/java/org/codehaus/waffle/monitor/AbstractWritingMonitor.java
- trunk/core/src/main/java/org/codehaus/waffle/servlet/WaffleServlet.java
- trunk/core/src/main/java/org/codehaus/waffle/validation/FieldErrorMessage.java
- trunk/core/src/test/java/org/codehaus/waffle/bind/IntrospectingRequestAttributeBinderTest.java
- trunk/core/src/test/java/org/codehaus/waffle/bind/OgnlDataBinderTest.java
- trunk/core/src/test/java/org/codehaus/waffle/context/pico/PicoComponentRegistryTest.java
- trunk/core/src/test/java/org/codehaus/waffle/servlet/WaffleServletTest.java
- trunk/core/src/test/java/org/codehaus/waffle/testmodel/StubComponentRegistry.java
- trunk/core/src/test/java/org/codehaus/waffle/testmodel/StubMonitor.java
Added Paths
Diff
Modified: trunk/core/src/main/java/org/codehaus/waffle/ComponentRegistry.java (350 => 351)
--- trunk/core/src/main/java/org/codehaus/waffle/ComponentRegistry.java 2007-11-12 11:11:24 UTC (rev 350) +++ trunk/core/src/main/java/org/codehaus/waffle/ComponentRegistry.java 2007-11-12 18:42:31 UTC (rev 351) @@ -25,6 +25,7 @@ import org.codehaus.waffle.controller.ControllerNameResolver; import org.codehaus.waffle.i18n.MessageResources; import org.codehaus.waffle.monitor.ActionMonitor; +import org.codehaus.waffle.monitor.BindMonitor; import org.codehaus.waffle.validation.Validator; import org.codehaus.waffle.view.ViewDispatcher; import org.codehaus.waffle.view.ViewResolver; @@ -44,10 +45,14 @@ ActionMethodResponseHandler getActionMethodResponseHandler(); + ActionMonitor getActionMonitor(); + ArgumentResolver getArgumentResolver(); BindErrorMessageResolver getBindErrorMessageResolver(); + BindMonitor getBindMonitor(); + ContextContainerFactory getContextContainerFactory(); ControllerNameResolver getControllerNameResolver(); @@ -62,8 +67,6 @@ MethodNameResolver getMethodNameResolver(); - ActionMonitor getMonitor(); - RequestAttributeBinder getRequestAttributeBinder(); TypeConverter getTypeConverter(); @@ -73,4 +76,5 @@ ViewDispatcher getViewDispatcher(); ViewResolver getViewResolver(); + }
Modified: trunk/core/src/main/java/org/codehaus/waffle/bind/IntrospectingRequestAttributeBinder.java (350 => 351)
--- trunk/core/src/main/java/org/codehaus/waffle/bind/IntrospectingRequestAttributeBinder.java 2007-11-12 11:11:24 UTC (rev 350) +++ trunk/core/src/main/java/org/codehaus/waffle/bind/IntrospectingRequestAttributeBinder.java 2007-11-12 18:42:31 UTC (rev 351) @@ -1,11 +1,5 @@ package org.codehaus.waffle.bind; -import org.codehaus.waffle.WaffleException; -import org.codehaus.waffle.controller.RubyController; -import org.jruby.javasupport.JavaEmbedUtils; -import org.jruby.runtime.builtin.IRubyObject; - -import javax.servlet.http.HttpServletRequest; import java.beans.BeanInfo; import java.beans.IntrospectionException; import java.beans.Introspector; @@ -15,11 +9,28 @@ import java.util.Map; import java.util.Set; +import javax.servlet.http.HttpServletRequest; + +import org.codehaus.waffle.WaffleException; +import org.codehaus.waffle.controller.RubyController; +import org.codehaus.waffle.monitor.BindMonitor; +import org.jruby.javasupport.JavaEmbedUtils; +import org.jruby.runtime.builtin.IRubyObject; + /** * This implementation can handle all standard Java objects and RubyControllers are handled specially (instance_variables) + * + * @author Michael Ward + * @author Mauro Talevi */ public class IntrospectingRequestAttributeBinder implements RequestAttributeBinder { + private final BindMonitor bindMonitor; + + public IntrospectingRequestAttributeBinder(BindMonitor bindMonitor) { + this.bindMonitor = bindMonitor; + } + public void bind(HttpServletRequest request, Object controller) { if (controller instanceof RubyController) { handleRubyController(request, (RubyController) controller); @@ -38,10 +49,13 @@ } } } catch (IntrospectionException e) { + bindMonitor.bindFailed(controller, e); throw new WaffleException(e); } catch (IllegalAccessException e) { + bindMonitor.bindFailed(controller, e); throw new WaffleException(e); } catch (InvocationTargetException e) { + bindMonitor.bindFailed(controller, e); throw new WaffleException(e); } }
Modified: trunk/core/src/main/java/org/codehaus/waffle/bind/OgnlDataBinder.java (350 => 351)
--- trunk/core/src/main/java/org/codehaus/waffle/bind/OgnlDataBinder.java 2007-11-12 11:11:24 UTC (rev 350) +++ trunk/core/src/main/java/org/codehaus/waffle/bind/OgnlDataBinder.java 2007-11-12 18:42:31 UTC (rev 351) @@ -10,6 +10,7 @@ *****************************************************************************/ package org.codehaus.waffle.bind; +import org.codehaus.waffle.monitor.BindMonitor; import org.codehaus.waffle.validation.BindErrorMessage; import org.codehaus.waffle.validation.ErrorsContext; import ognl.InappropriateExpressionException; @@ -27,16 +28,19 @@ * This DataBinder implementation is backed by <a href="" Object Graph Notation Language</a>. * * @author Michael Ward + * @author Mauro Talevi */ public class OgnlDataBinder implements DataBinder { private final TypeConverter typeConverter; private final BindErrorMessageResolver bindErrorMessageResolver; + private final BindMonitor bindMonitor; - public OgnlDataBinder(TypeConverter typeConverter, BindErrorMessageResolver bindErrorMessageResolver) { + public OgnlDataBinder(TypeConverter typeConverter, BindErrorMessageResolver bindErrorMessageResolver, BindMonitor bindMonitor) { this.typeConverter = typeConverter; this.bindErrorMessageResolver = bindErrorMessageResolver; + this.bindMonitor = bindMonitor; } - + @SuppressWarnings({"unchecked"}) public void bind(HttpServletRequest request, HttpServletResponse response, ErrorsContext errorsContext, Object model) { Enumeration<String> parameterNames = request.getParameterNames(); @@ -49,10 +53,14 @@ handleConvert(name, value, model); } catch (OgnlException e) { String message = bindErrorMessageResolver.resolve(model, name, value); - errorsContext.addErrorMessage(new BindErrorMessage(name, value, message)); + BindErrorMessage errorMessage = new BindErrorMessage(name, value, message); + errorsContext.addErrorMessage(errorMessage); + bindMonitor.bindFailed(model, errorMessage); } catch (BindException e) { // by convention BindExceptions should provide the correct bind error message to display to the end-user - errorsContext.addErrorMessage(new BindErrorMessage(name, value, e.getMessage())); + BindErrorMessage errorMessage = new BindErrorMessage(name, value, e.getMessage()); + errorsContext.addErrorMessage(errorMessage); + bindMonitor.bindFailed(model, errorMessage); } } } @@ -73,7 +81,6 @@ if (e.getReason() instanceof BindException) { throw (BindException) e.getReason(); } - throw e; } }
Modified: trunk/core/src/main/java/org/codehaus/waffle/bind/OgnlTypeConverter.java (350 => 351)
--- trunk/core/src/main/java/org/codehaus/waffle/bind/OgnlTypeConverter.java 2007-11-12 11:11:24 UTC (rev 350) +++ trunk/core/src/main/java/org/codehaus/waffle/bind/OgnlTypeConverter.java 2007-11-12 18:42:31 UTC (rev 351) @@ -24,6 +24,7 @@ * @author Michael Ward */ public class OgnlTypeConverter implements TypeConverter { + private static final String EMPTY = ""; private final WaffleTypeConverter[] waffleTypeConverters; private final Map<Class, WaffleTypeConverter> cache = new HashMap<Class, WaffleTypeConverter>(); @@ -52,7 +53,7 @@ * @param propertyName property name being set * @param value value to be converted * @param toType type to which value is converted - * @return Converted value of type toType or TypeConverter.NoConversionPossible to indicate that the + * @return Converted value Object of type toType or TypeConverter.NoConversionPossible to indicate that the * conversion was not possible. */ public Object convertValue(Map context, @@ -67,15 +68,16 @@ /** * Simplified entry point for Ognl use in Waffle * - * @param propertyName - * @param value - * @param toType - * @return + * @param propertyName property name being set + * @param value value to be converted + * @param toType type to which value is converted + * @return Converted value Object of type toType or TypeConverter.NoConversionPossible to indicate that the + * conversion was not possible. */ @SuppressWarnings({"unchecked"}) public Object convertValue(String propertyName, String value, Class toType) { if (toType.isEnum()) { - if ("".equals(value)) { + if (EMPTY.equals(value)) { return null; } return Enum.valueOf(toType, value);
Modified: trunk/core/src/main/java/org/codehaus/waffle/bind/RequestAttributeBinder.java (350 => 351)
--- trunk/core/src/main/java/org/codehaus/waffle/bind/RequestAttributeBinder.java 2007-11-12 11:11:24 UTC (rev 350) +++ trunk/core/src/main/java/org/codehaus/waffle/bind/RequestAttributeBinder.java 2007-11-12 18:42:31 UTC (rev 351) @@ -1,3 +1,13 @@ +/***************************************************************************** + * Copyright (C) 2005,2006 Michael Ward * + * All rights reserved. * + * ------------------------------------------------------------------------- * + * The software in this package is published under the terms of the BSD * + * style license a copy of which has been included with this distribution in * + * the LICENSE.txt file. * + * * + * Original code by: Michael Ward * + *****************************************************************************/ package org.codehaus.waffle.bind; import javax.servlet.http.HttpServletRequest; @@ -5,6 +15,8 @@ /** * Implementors of this class allow for properties from a controller to be exposed as request attributes. This * simplifies view development. + * + * @author Michael Ward */ public interface RequestAttributeBinder {
Modified: trunk/core/src/main/java/org/codehaus/waffle/bind/RubyDataBinder.java (350 => 351)
--- trunk/core/src/main/java/org/codehaus/waffle/bind/RubyDataBinder.java 2007-11-12 11:11:24 UTC (rev 350) +++ trunk/core/src/main/java/org/codehaus/waffle/bind/RubyDataBinder.java 2007-11-12 18:42:31 UTC (rev 351) @@ -1,23 +1,25 @@ package org.codehaus.waffle.bind; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + import ognl.TypeConverter; + import org.codehaus.waffle.action.ArgumentResolver; import org.codehaus.waffle.controller.RubyController; +import org.codehaus.waffle.monitor.BindMonitor; import org.codehaus.waffle.validation.ErrorsContext; import org.jruby.Ruby; import org.jruby.javasupport.JavaEmbedUtils; import org.jruby.runtime.builtin.IRubyObject; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - public class RubyDataBinder extends OgnlDataBinder { private final ArgumentResolver argumentResolver; public RubyDataBinder(TypeConverter typeConverter, BindErrorMessageResolver bindErrorMessageResolver, - ArgumentResolver argumentResolver) { - super(typeConverter, bindErrorMessageResolver); + ArgumentResolver argumentResolver, BindMonitor bindMonitor) { + super(typeConverter, bindErrorMessageResolver, bindMonitor); this.argumentResolver = argumentResolver; }
Modified: trunk/core/src/main/java/org/codehaus/waffle/context/pico/PicoComponentRegistry.java (350 => 351)
--- trunk/core/src/main/java/org/codehaus/waffle/context/pico/PicoComponentRegistry.java 2007-11-12 11:11:24 UTC (rev 350) +++ trunk/core/src/main/java/org/codehaus/waffle/context/pico/PicoComponentRegistry.java 2007-11-12 18:42:31 UTC (rev 351) @@ -10,7 +10,12 @@ *****************************************************************************/ package org.codehaus.waffle.context.pico; +import java.util.Enumeration; + +import javax.servlet.ServletContext; + import ognl.TypeConverter; + import org.codehaus.waffle.ComponentRegistry; import org.codehaus.waffle.WaffleException; import org.codehaus.waffle.action.ActionMethodExecutor; @@ -38,6 +43,7 @@ import org.codehaus.waffle.i18n.DefaultMessageResources; import org.codehaus.waffle.i18n.MessageResources; import org.codehaus.waffle.monitor.ActionMonitor; +import org.codehaus.waffle.monitor.BindMonitor; import org.codehaus.waffle.monitor.SilentMonitor; import org.codehaus.waffle.validation.DefaultValidator; import org.codehaus.waffle.validation.Validator; @@ -50,9 +56,6 @@ import org.picocontainer.defaults.ConstructorInjectionComponentAdapter; import org.picocontainer.defaults.DefaultPicoContainer; -import javax.servlet.ServletContext; -import java.util.Enumeration; - /** * PicoContainer-based implementation of Waffle's ComponentRegistry * @@ -73,17 +76,18 @@ // register all known components register(ActionMethodExecutor.class, InterceptingActionMethodExecutor.class, servletContext); register(ActionMethodResponseHandler.class, DefaultActionMethodResponseHandler.class, servletContext); + register(ActionMonitor.class, SilentMonitor.class, servletContext); register(ArgumentResolver.class, HierarchicalArgumentResolver.class, servletContext); register(BindErrorMessageResolver.class, DefaultBindErrorMessageResolver.class, servletContext); + register(DataBinder.class, OgnlDataBinder.class, servletContext); + register(RequestAttributeBinder.class, IntrospectingRequestAttributeBinder.class, servletContext); + register(BindMonitor.class, SilentMonitor.class, servletContext); register(ContextContainerFactory.class, PicoContextContainerFactory.class, servletContext); register(ControllerDefinitionFactory.class, ContextControllerDefinitionFactory.class, servletContext); register(ControllerNameResolver.class, ContextPathControllerNameResolver.class, servletContext); - register(DataBinder.class, OgnlDataBinder.class, servletContext); register(MessageResources.class, DefaultMessageResources.class, servletContext); register(MethodDefinitionFinder.class, AnnotatedMethodDefinitionFinder.class, servletContext); register(MethodNameResolver.class, RequestParameterMethodNameResolver.class, servletContext); - register(ActionMonitor.class, SilentMonitor.class, servletContext); - register(RequestAttributeBinder.class, IntrospectingRequestAttributeBinder.class, servletContext); register(TypeConverter.class, OgnlTypeConverter.class, servletContext); register(Validator.class, DefaultValidator.class, servletContext); register(ViewDispatcher.class, DefaultViewDispatcher.class, servletContext); @@ -231,7 +235,7 @@ return locateByType(MethodNameResolver.class); } - public ActionMonitor getMonitor() { + public ActionMonitor getActionMonitor() { return locateByType(ActionMonitor.class); } @@ -239,6 +243,10 @@ return locateByType(RequestAttributeBinder.class); } + public BindMonitor getBindMonitor() { + return locateByType(BindMonitor.class); + } + public TypeConverter getTypeConverter() { return locateByType(TypeConverter.class); }
Modified: trunk/core/src/main/java/org/codehaus/waffle/monitor/AbstractWritingMonitor.java (350 => 351)
--- trunk/core/src/main/java/org/codehaus/waffle/monitor/AbstractWritingMonitor.java 2007-11-12 11:11:24 UTC (rev 350) +++ trunk/core/src/main/java/org/codehaus/waffle/monitor/AbstractWritingMonitor.java 2007-11-12 18:42:31 UTC (rev 351) @@ -12,17 +12,19 @@ import static org.codehaus.waffle.monitor.Monitor.Level.DEBUG; import static org.codehaus.waffle.monitor.Monitor.Level.INFO; +import static org.codehaus.waffle.monitor.Monitor.Level.WARN; import java.util.Set; import org.codehaus.waffle.action.MethodDefinition; +import org.codehaus.waffle.validation.BindErrorMessage; /** * Abstract implementation of Monitor that delegates writing to concrete subclasses. * * @author Mauro Talevi */ -public abstract class AbstractWritingMonitor implements ActionMonitor { +public abstract class AbstractWritingMonitor implements ActionMonitor, BindMonitor { /** * Writes message for a given level. Concrete implementations should provide writing functionality. @@ -62,4 +64,12 @@ public void actionMethodExecutionFailed(Exception exception) { trace(exception); } + + public void bindFailed(Object bindModel, BindErrorMessage errorMessage){ + write(WARN, "Bind failed for model " + bindModel + ": " + errorMessage); + } + + public void bindFailed(Object controller, Throwable cause){ + write(WARN, "Bind failed for controller " + controller + ": " + cause); + } }
Added: trunk/core/src/main/java/org/codehaus/waffle/monitor/BindMonitor.java (0 => 351)
--- trunk/core/src/main/java/org/codehaus/waffle/monitor/BindMonitor.java (rev 0) +++ trunk/core/src/main/java/org/codehaus/waffle/monitor/BindMonitor.java 2007-11-12 18:42:31 UTC (rev 351) @@ -0,0 +1,27 @@ +/***************************************************************************** + * Copyright (C) 2005,2006 Michael Ward * + * All rights reserved. * + * ------------------------------------------------------------------------- * + * The software in this package is published under the terms of the BSD * + * style license a copy of which has been included with this distribution in * + * the LICENSE.txt file. * + * * + * Original code by: Mauro Talevi * + *****************************************************************************/ +package org.codehaus.waffle.monitor; + +import org.codehaus.waffle.validation.BindErrorMessage; + + +/** + * A monitor for bind-related events + * + * @author Mauro Talevi + */ +public interface BindMonitor extends Monitor { + + void bindFailed(Object bindModel, BindErrorMessage errorMessage); + + void bindFailed(Object controller, Throwable cause); + +}
Modified: trunk/core/src/main/java/org/codehaus/waffle/servlet/WaffleServlet.java (350 => 351)
--- trunk/core/src/main/java/org/codehaus/waffle/servlet/WaffleServlet.java 2007-11-12 11:11:24 UTC (rev 350) +++ trunk/core/src/main/java/org/codehaus/waffle/servlet/WaffleServlet.java 2007-11-12 18:42:31 UTC (rev 351) @@ -52,13 +52,20 @@ private RequestAttributeBinder requestAttributeBinder; private String viewPrefix; private String viewSuffix; - private boolean depsDone = false; + private boolean componentsRetrieved = false; public WaffleServlet() { } /** - * Needed for builder ... and helpful for testing + * Constructor required by builder and useful for testing + * + * @param controllerDefinitionFactory + * @param dataBinder + * @param actionMethodExecutor + * @param actionMethodResponseHandler + * @param validator + * @param requestAttributeBinder */ public WaffleServlet(ControllerDefinitionFactory controllerDefinitionFactory, DataBinder dataBinder, @@ -72,7 +79,7 @@ this.actionMethodResponseHandler = actionMethodResponseHandler; this.validator = validator; this.requestAttributeBinder = requestAttributeBinder; - depsDone = true; + componentsRetrieved = true; } public void init() throws ServletException { @@ -86,8 +93,8 @@ viewSuffix = DEFAULT_VIEW_SUFFIX; // default } - if (!depsDone) { - // Obtain required components from the Component Registry + if (!componentsRetrieved) { + // Retrieve required components from the Component Registry ComponentRegistry componentRegistry = ServletContextHelper .getComponentRegistry(getServletContext()); controllerDefinitionFactory = componentRegistry.getControllerDefinitionFactory();
Modified: trunk/core/src/main/java/org/codehaus/waffle/validation/FieldErrorMessage.java (350 => 351)
--- trunk/core/src/main/java/org/codehaus/waffle/validation/FieldErrorMessage.java 2007-11-12 11:11:24 UTC (rev 350) +++ trunk/core/src/main/java/org/codehaus/waffle/validation/FieldErrorMessage.java 2007-11-12 18:42:31 UTC (rev 351) @@ -38,4 +38,15 @@ return value; } + @Override + public String toString() { + StringBuffer sb = new StringBuffer("[FieldErrorMessage name="); + sb.append(name); + sb.append(", value="); + sb.append(value); + sb.append(", message="); + sb.append(message); + sb.append("]"); + return sb.toString(); + } }
Modified: trunk/core/src/test/java/org/codehaus/waffle/bind/IntrospectingRequestAttributeBinderTest.java (350 => 351)
--- trunk/core/src/test/java/org/codehaus/waffle/bind/IntrospectingRequestAttributeBinderTest.java 2007-11-12 11:11:24 UTC (rev 350) +++ trunk/core/src/test/java/org/codehaus/waffle/bind/IntrospectingRequestAttributeBinderTest.java 2007-11-12 18:42:31 UTC (rev 351) @@ -1,6 +1,9 @@ package org.codehaus.waffle.bind; +import javax.servlet.http.HttpServletRequest; + import org.codehaus.waffle.controller.RubyController; +import org.codehaus.waffle.monitor.SilentMonitor; import org.jmock.Expectations; import org.jmock.Mockery; import org.jmock.integration.junit4.JMock; @@ -10,8 +13,6 @@ import org.junit.Test; import org.junit.runner.RunWith; -import javax.servlet.http.HttpServletRequest; - @RunWith(JMock.class) public class IntrospectingRequestAttributeBinderTest { private final Mockery context = new JUnit4Mockery(); @@ -25,7 +26,7 @@ one (request).setAttribute("null", null); }}); - IntrospectingRequestAttributeBinder binder = new IntrospectingRequestAttributeBinder(); + IntrospectingRequestAttributeBinder binder = new IntrospectingRequestAttributeBinder(new SilentMonitor()); binder.bind(request, new SimpleController()); } @@ -63,7 +64,7 @@ one (request).setAttribute("number", 1985L); }}); - IntrospectingRequestAttributeBinder binder = new IntrospectingRequestAttributeBinder(); + IntrospectingRequestAttributeBinder binder = new IntrospectingRequestAttributeBinder(new SilentMonitor()); binder.bind(request, controller); }
Modified: trunk/core/src/test/java/org/codehaus/waffle/bind/OgnlDataBinderTest.java (350 => 351)
--- trunk/core/src/test/java/org/codehaus/waffle/bind/OgnlDataBinderTest.java 2007-11-12 11:11:24 UTC (rev 350) +++ trunk/core/src/test/java/org/codehaus/waffle/bind/OgnlDataBinderTest.java 2007-11-12 18:42:31 UTC (rev 351) @@ -15,6 +15,7 @@ import ognl.DefaultTypeConverter; import org.codehaus.waffle.context.ContextLevel; +import org.codehaus.waffle.monitor.SilentMonitor; import org.codehaus.waffle.testmodel.FakeBean; import org.codehaus.waffle.testmodel.FakeController; import org.codehaus.waffle.validation.BindErrorMessage; @@ -57,7 +58,7 @@ }); FakeController fakeController = new FakeController(); - DataBinder binder = new OgnlDataBinder(new OgnlTypeConverter(), null); + DataBinder binder = new OgnlDataBinder(new OgnlTypeConverter(), null, new SilentMonitor()); ErrorsContext errorsContext = new DefaultErrorsContext(); binder.bind(request, null, errorsContext, fakeController); @@ -84,7 +85,7 @@ }); FakeController fakeController = new FakeController(); - DataBinder binder = new OgnlDataBinder(new DefaultTypeConverter(), null); + DataBinder binder = new OgnlDataBinder(new DefaultTypeConverter(), null, new SilentMonitor()); ErrorsContext errorsContext = new DefaultErrorsContext(); binder.bind(request, null, errorsContext, fakeController); @@ -110,7 +111,7 @@ }); FakeController fakeController = new FakeController(); - DataBinder binder = new OgnlDataBinder(new DefaultTypeConverter(), null); + DataBinder binder = new OgnlDataBinder(new DefaultTypeConverter(), null, new SilentMonitor()); ErrorsContext errorsContext = new DefaultErrorsContext(); binder.bind(request, null, errorsContext, fakeController); @@ -139,7 +140,7 @@ }); FakeController fakeController = new FakeController(); - DataBinder binder = new OgnlDataBinder(new DefaultTypeConverter(), null); + DataBinder binder = new OgnlDataBinder(new DefaultTypeConverter(), null, new SilentMonitor()); ErrorsContext errorsContext = new DefaultErrorsContext(); binder.bind(request, null, errorsContext, fakeController); @@ -171,7 +172,7 @@ } }); - DataBinder binder = new OgnlDataBinder(new DefaultTypeConverter(), resolver); + DataBinder binder = new OgnlDataBinder(new DefaultTypeConverter(), resolver, new SilentMonitor()); ErrorsContext errorsContext = new DefaultErrorsContext(); binder.bind(request, null, errorsContext, new FakeBean()); @@ -202,7 +203,7 @@ } }); - DataBinder binder = new OgnlDataBinder(new DefaultTypeConverter(), null) { + DataBinder binder = new OgnlDataBinder(new DefaultTypeConverter(), null, new SilentMonitor()) { protected void handleConvert(String parameterName, String parameterValue, Object model) { throw new BindException("fake from test"); }
Modified: trunk/core/src/test/java/org/codehaus/waffle/context/pico/PicoComponentRegistryTest.java (350 => 351)
--- trunk/core/src/test/java/org/codehaus/waffle/context/pico/PicoComponentRegistryTest.java 2007-11-12 11:11:24 UTC (rev 350) +++ trunk/core/src/test/java/org/codehaus/waffle/context/pico/PicoComponentRegistryTest.java 2007-11-12 18:42:31 UTC (rev 351) @@ -44,6 +44,7 @@ import org.codehaus.waffle.i18n.MessageResources; import org.codehaus.waffle.monitor.AbstractWritingMonitor; import org.codehaus.waffle.monitor.ActionMonitor; +import org.codehaus.waffle.monitor.BindMonitor; import org.codehaus.waffle.testmodel.StubActionMethodExecutor; import org.codehaus.waffle.testmodel.StubActionMethodResponseHandler; import org.codehaus.waffle.testmodel.StubArgumentResolver; @@ -126,22 +127,23 @@ { one(servletContext).getInitParameterNames(); will(returnValue(EMPTY_ENUMERATION)); - exactly(17).of(servletContext).getInitParameter(with(any(String.class))); + exactly(18).of(servletContext).getInitParameter(with(any(String.class))); } }); ComponentRegistry componentRegistry = new PicoComponentRegistry(servletContext); + assertTrue(componentRegistry.getActionMethodExecutor() instanceof InterceptingActionMethodExecutor); + assertTrue(componentRegistry.getActionMethodResponseHandler() instanceof DefaultActionMethodResponseHandler); + assertTrue(componentRegistry.getActionMonitor() instanceof AbstractWritingMonitor); + assertTrue(componentRegistry.getBindErrorMessageResolver() instanceof DefaultBindErrorMessageResolver); + assertTrue(componentRegistry.getDataBinder() instanceof OgnlDataBinder); + assertTrue(componentRegistry.getBindMonitor() instanceof AbstractWritingMonitor); assertTrue(componentRegistry.getControllerNameResolver() instanceof ContextPathControllerNameResolver); assertTrue(componentRegistry.getControllerDefinitionFactory() instanceof ContextControllerDefinitionFactory); assertTrue(componentRegistry.getContextContainerFactory() instanceof AbstractContextContainerFactory); - assertTrue(componentRegistry.getBindErrorMessageResolver() instanceof DefaultBindErrorMessageResolver); - assertTrue(componentRegistry.getDataBinder() instanceof OgnlDataBinder); - assertTrue(componentRegistry.getActionMethodExecutor() instanceof InterceptingActionMethodExecutor); - assertTrue(componentRegistry.getActionMethodResponseHandler() instanceof DefaultActionMethodResponseHandler); assertTrue(componentRegistry.getMethodNameResolver() instanceof RequestParameterMethodNameResolver); assertTrue(componentRegistry.getMessageResources() instanceof DefaultMessageResources); - assertTrue(componentRegistry.getMonitor() instanceof AbstractWritingMonitor); assertTrue(componentRegistry.getViewDispatcher() instanceof DefaultViewDispatcher); assertTrue(componentRegistry.getTypeConverter() instanceof OgnlTypeConverter); assertTrue(componentRegistry.getViewResolver() instanceof DefaultViewResolver); @@ -156,16 +158,32 @@ { one(servletContext).getInitParameterNames(); will(returnValue(EMPTY_ENUMERATION)); - one(servletContext).getInitParameter(ControllerNameResolver.class.getName()); - will(returnValue(StubControllerNameResolver.class.getName())); + one(servletContext).getInitParameter(ActionMethodExecutor.class.getName()); + will(returnValue(StubActionMethodExecutor.class.getName())); + one(servletContext).getInitParameter(Validator.class.getName()); + will(returnValue(StubValidator.class.getName())); + one(servletContext).getInitParameter(MessageResources.class.getName()); + will(returnValue(StubMessageResources.class.getName())); + one(servletContext).getInitParameter(MethodDefinitionFinder.class.getName()); + will(returnValue(StubMethodDefinitionFinder.class.getName())); + one(servletContext).getInitParameter(MethodNameResolver.class.getName()); + will(returnValue(StubMethodNameResolver.class.getName())); + one(servletContext).getInitParameter(ActionMethodResponseHandler.class.getName()); + will(returnValue(StubActionMethodResponseHandler.class.getName())); + one(servletContext).getInitParameter(ActionMonitor.class.getName()); + will(returnValue(StubMonitor.class.getName())); one(servletContext).getInitParameter(ArgumentResolver.class.getName()); will(returnValue(StubArgumentResolver.class.getName())); one(servletContext).getInitParameter(BindErrorMessageResolver.class.getName()); will(returnValue(StubBindErrorMessageResolver.class.getName())); one(servletContext).getInitParameter(DataBinder.class.getName()); will(returnValue(StubDataBinder.class.getName())); - one(servletContext).getInitParameter(ActionMethodResponseHandler.class.getName()); - will(returnValue(StubActionMethodResponseHandler.class.getName())); + one(servletContext).getInitParameter(RequestAttributeBinder.class.getName()); + will(returnValue(StubRequestAttributeBinder.class.getName())); + one(servletContext).getInitParameter(BindMonitor.class.getName()); + will(returnValue(StubMonitor.class.getName())); + one(servletContext).getInitParameter(ControllerNameResolver.class.getName()); + will(returnValue(StubControllerNameResolver.class.getName())); one(servletContext).getInitParameter(TypeConverter.class.getName()); will(returnValue(DefaultTypeConverter.class.getName())); one(servletContext).getInitParameter(ViewDispatcher.class.getName()); @@ -176,20 +194,6 @@ will(returnValue(StubControllerDefinitionFactory.class.getName())); one(servletContext).getInitParameter(ContextContainerFactory.class.getName()); will(returnValue(StubContextContainerFactory.class.getName())); - one(servletContext).getInitParameter(ActionMethodExecutor.class.getName()); - will(returnValue(StubActionMethodExecutor.class.getName())); - one(servletContext).getInitParameter(Validator.class.getName()); - will(returnValue(StubValidator.class.getName())); - one(servletContext).getInitParameter(MessageResources.class.getName()); - will(returnValue(StubMessageResources.class.getName())); - one(servletContext).getInitParameter(MethodDefinitionFinder.class.getName()); - will(returnValue(StubMethodDefinitionFinder.class.getName())); - one(servletContext).getInitParameter(MethodNameResolver.class.getName()); - will(returnValue(StubMethodNameResolver.class.getName())); - one(servletContext).getInitParameter(ActionMonitor.class.getName()); - will(returnValue(StubMonitor.class.getName())); - one(servletContext).getInitParameter(RequestAttributeBinder.class.getName()); - will(returnValue(StubRequestAttributeBinder.class.getName())); } }); ComponentRegistry componentRegistry = new PicoComponentRegistry(servletContext); @@ -205,12 +209,13 @@ assertTrue(componentRegistry.getMethodNameResolver() instanceof StubMethodNameResolver); assertTrue(componentRegistry.getActionMethodResponseHandler() instanceof StubActionMethodResponseHandler); assertTrue(componentRegistry.getMessageResources() instanceof StubMessageResources); - assertTrue(componentRegistry.getMonitor() instanceof StubMonitor); assertTrue(componentRegistry.getRequestAttributeBinder() instanceof StubRequestAttributeBinder); assertTrue(componentRegistry.getTypeConverter() instanceof DefaultTypeConverter); assertTrue(componentRegistry.getValidator() instanceof StubValidator); assertTrue(componentRegistry.getViewDispatcher() instanceof StubViewDispatcher); assertTrue(componentRegistry.getViewResolver() instanceof StubViewResolver); + assertTrue(componentRegistry.getActionMonitor() instanceof StubMonitor); + assertTrue(componentRegistry.getBindMonitor() instanceof StubMonitor); } public void testRegisterAdditionalComponents() {
Modified: trunk/core/src/test/java/org/codehaus/waffle/servlet/WaffleServletTest.java (350 => 351)
--- trunk/core/src/test/java/org/codehaus/waffle/servlet/WaffleServletTest.java 2007-11-12 11:11:24 UTC (rev 350) +++ trunk/core/src/test/java/org/codehaus/waffle/servlet/WaffleServletTest.java 2007-11-12 18:42:31 UTC (rev 351) @@ -10,7 +10,22 @@ *****************************************************************************/ package org.codehaus.waffle.servlet; +import java.io.IOException; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.Collections; +import java.util.Enumeration; +import java.util.List; + +import javax.servlet.ServletConfig; +import javax.servlet.ServletContext; +import javax.servlet.ServletException; +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + import ognl.DefaultTypeConverter; + import org.codehaus.waffle.ComponentRegistry; import org.codehaus.waffle.Constants; import org.codehaus.waffle.WaffleException; @@ -26,6 +41,7 @@ import org.codehaus.waffle.context.pico.PicoContextContainer; import org.codehaus.waffle.controller.ControllerDefinition; import org.codehaus.waffle.controller.ControllerDefinitionFactory; +import org.codehaus.waffle.monitor.SilentMonitor; import org.codehaus.waffle.validation.ErrorsContext; import org.codehaus.waffle.validation.Validator; import org.codehaus.waffle.view.View; @@ -38,19 +54,6 @@ import org.junit.runner.RunWith; import org.picocontainer.defaults.DefaultPicoContainer; -import javax.servlet.ServletConfig; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; -import javax.servlet.ServletOutputStream; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.util.Collections; -import java.util.Enumeration; -import java.util.List; - /** * * @author Michael Ward @@ -143,7 +146,7 @@ // stub out what we don't want called ... execute it WaffleServlet waffleServlet = new WaffleServlet(null, - new OgnlDataBinder(new DefaultTypeConverter(), null), + new OgnlDataBinder(new DefaultTypeConverter(), null, new SilentMonitor()), new InterceptingActionMethodExecutor(), actionMethodResponseHandler, validator, @@ -204,7 +207,7 @@ // stub out what we don't want called ... execute it WaffleServlet waffleServlet = new WaffleServlet(null, - new OgnlDataBinder(new DefaultTypeConverter(), null), + new OgnlDataBinder(new DefaultTypeConverter(), null, new SilentMonitor()), new InterceptingActionMethodExecutor(), actionMethodResponseHandler, validator, @@ -284,7 +287,7 @@ // stub out what we don't want called ... execute it WaffleServlet waffleServlet = new WaffleServlet(null, - new OgnlDataBinder(new DefaultTypeConverter(), null), + new OgnlDataBinder(new DefaultTypeConverter(), null, new SilentMonitor()), null, actionMethodResponseHandler, validator, @@ -353,7 +356,7 @@ // Set up what normally would happen via "init()" Field dataBinderField = WaffleServlet.class.getDeclaredField("dataBinder"); dataBinderField.setAccessible(true); - dataBinderField.set(waffleServlet, new OgnlDataBinder(new DefaultTypeConverter(), null)); + dataBinderField.set(waffleServlet, new OgnlDataBinder(new DefaultTypeConverter(), null, new SilentMonitor())); Field mockMethodExecutorField = WaffleServlet.class.getDeclaredField("actionMethodExecutor"); mockMethodExecutorField.setAccessible(true);
Modified: trunk/core/src/test/java/org/codehaus/waffle/testmodel/StubComponentRegistry.java (350 => 351)
--- trunk/core/src/test/java/org/codehaus/waffle/testmodel/StubComponentRegistry.java 2007-11-12 11:11:24 UTC (rev 350) +++ trunk/core/src/test/java/org/codehaus/waffle/testmodel/StubComponentRegistry.java 2007-11-12 18:42:31 UTC (rev 351) @@ -1,19 +1,21 @@ package org.codehaus.waffle.testmodel; -import org.codehaus.waffle.controller.ControllerDefinitionFactory; +import javax.servlet.ServletContext; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import ognl.DefaultTypeConverter; + +import org.codehaus.waffle.action.ActionMethodExecutor; +import org.codehaus.waffle.action.ActionMethodResponse; +import org.codehaus.waffle.action.ActionMethodResponseHandler; import org.codehaus.waffle.bind.DataBinder; import org.codehaus.waffle.bind.OgnlDataBinder; import org.codehaus.waffle.context.ContextContainerFactory; import org.codehaus.waffle.context.pico.PicoComponentRegistry; -import org.codehaus.waffle.action.ActionMethodResponse; -import org.codehaus.waffle.action.ActionMethodResponseHandler; -import org.codehaus.waffle.action.ActionMethodExecutor; -import ognl.DefaultTypeConverter; +import org.codehaus.waffle.controller.ControllerDefinitionFactory; +import org.codehaus.waffle.monitor.SilentMonitor; -import javax.servlet.ServletContext; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - public class StubComponentRegistry extends PicoComponentRegistry { public StubComponentRegistry(ServletContext servletContext) { @@ -32,7 +34,7 @@ } public DataBinder getDataBinder() { - return new OgnlDataBinder(new DefaultTypeConverter(), null); + return new OgnlDataBinder(new DefaultTypeConverter(), null, new SilentMonitor()); } public ControllerDefinitionFactory getControllerDefinitionFactory() {
Modified: trunk/core/src/test/java/org/codehaus/waffle/testmodel/StubMonitor.java (350 => 351)
--- trunk/core/src/test/java/org/codehaus/waffle/testmodel/StubMonitor.java 2007-11-12 11:11:24 UTC (rev 350) +++ trunk/core/src/test/java/org/codehaus/waffle/testmodel/StubMonitor.java 2007-11-12 18:42:31 UTC (rev 351) @@ -1,12 +1,14 @@ package org.codehaus.waffle.testmodel; +import java.util.Set; + import org.codehaus.waffle.action.MethodDefinition; import org.codehaus.waffle.monitor.ActionMonitor; +import org.codehaus.waffle.monitor.BindMonitor; +import org.codehaus.waffle.validation.BindErrorMessage; -import java.util.Set; +public class StubMonitor implements ActionMonitor, BindMonitor { -public class StubMonitor implements ActionMonitor { - public void defaultActionMethodFound(MethodDefinition methodDefinition) { } @@ -24,4 +26,10 @@ public void actionMethodExecutionFailed(Exception exception) { } + + public void bindFailed(Object bindModel, BindErrorMessage errorMessage) { + } + + public void bindFailed(Object controller, Throwable cause) { + } }
To unsubscribe from this list please visit:
