Update of /var/cvs/applications/taglib/src/org/mmbase/bridge/jsp/taglib/functions In directory james.mmbase.org:/tmp/cvs-serv24833
Modified Files: AbstractFunctionTag.java Log Message: clearer exceptions if function not found See also: http://cvs.mmbase.org/viewcvs/applications/taglib/src/org/mmbase/bridge/jsp/taglib/functions Index: AbstractFunctionTag.java =================================================================== RCS file: /var/cvs/applications/taglib/src/org/mmbase/bridge/jsp/taglib/functions/AbstractFunctionTag.java,v retrieving revision 1.33 retrieving revision 1.34 diff -u -b -r1.33 -r1.34 --- AbstractFunctionTag.java 21 Oct 2008 18:29:18 -0000 1.33 +++ AbstractFunctionTag.java 2 Mar 2009 14:42:21 -0000 1.34 @@ -39,7 +39,7 @@ * * @author Michiel Meeuwissen * @since MMBase-1.7 - * @version $Id: AbstractFunctionTag.java,v 1.33 2008/10/21 18:29:18 michiel Exp $ + * @version $Id: AbstractFunctionTag.java,v 1.34 2009/03/02 14:42:21 michiel Exp $ */ abstract public class AbstractFunctionTag extends NodeReferrerTag { @@ -141,22 +141,29 @@ return col; } + + protected final Function getFunction(String functionName) throws JspTagException { + return getFunction(functionName, false); + } /** * Gets function object, and checks consistency of attributes. */ - protected final Function getFunction(String functionName) throws JspTagException { - Function function; + protected final Function getFunction(String functionName, boolean exception) throws JspTagException { // now determin on what the object the function must be done. if (nodeManager != Attribute.NULL) { if (module != Attribute.NULL || functionSet != Attribute.NULL || functionClass != Attribute.NULL || parentNodeId != Attribute.NULL) { throw new TaglibException("You can only use one of 'nodemanager', 'module', 'set', 'class' or 'node' on a function tag"); } - return getCloudVar().getNodeManager(nodeManager.getString(this)).getFunction(functionName); + Function f = getCloudVar().getNodeManager(nodeManager.getString(this)).getFunction(functionName); + if (f == null && exception) throw new JspTagException("No function '" + functionName + "' for nodemanager " + nodeManager.getString(this)); + return f; } else if (module != Attribute.NULL) { if (nodeManager != Attribute.NULL || functionSet != Attribute.NULL || functionClass != Attribute.NULL || parentNodeId != Attribute.NULL) { throw new TaglibException("You can only use one of 'nodemanager', 'module', 'set', 'class' or 'node' on a function tag"); } - return FunctionFactory.getFunction(getCloudContext().getModule(module.getString(this)), functionName); // or: module.getFunction(functionName); + Function f = FunctionFactory.getFunction(getCloudContext().getModule(module.getString(this)), functionName); // or: module.getFunction(functionName); + if (f == null && exception) throw new JspTagException("No function '" + functionName + "' for module " + module.getString(this)); + return f; } else if (functionSet != Attribute.NULL) { if (nodeManager != Attribute.NULL || module != Attribute.NULL || parentNodeId != Attribute.NULL || functionClass != Attribute.NULL) { throw new TaglibException("You can only use one of 'nodemanager', 'module', 'set', 'class' or 'node' on a function tag"); @@ -165,13 +172,19 @@ if (set.equals(THISPAGE)) { Class<? extends Object> jspClass = pageContext.getPage().getClass(); Method method = Functions.getMethodFromClass(jspClass, functionName); - return FunctionFactory.getFunction(method, functionName); // or: new MethodFunction(method, functionName); + Function f = FunctionFactory.getFunction(method, functionName); // or: new MethodFunction(method, functionName); + if (f == null && exception) throw new JspTagException("No function '" + functionName + "' on this page"); + return f; } else { CloudProvider cp = findCloudProvider(false); if (cp != null) { - return FunctionFactory.getFunction(cp.getCloudVar(), set, functionName); - } else { - return FunctionFactory.getFunction(set, functionName); + Function f = FunctionFactory.getFunction(cp.getCloudVar(), set, functionName); + if (f == null && exception) throw new JspTagException("No function '" + functionName + "' in set '" + set + "'"); + return f; + } else { + Function f = FunctionFactory.getFunction(set, functionName); + if (f == null && exception) throw new JspTagException("No function '" + functionName + "' in set '" + set + "'"); + return f; } } } else if (functionClass != Attribute.NULL) { @@ -187,7 +200,9 @@ } else { clazz = Class.forName(className); } - return FunctionFactory.getFunction(clazz, functionName); // BeanFunction.getFunction(clazz,functionName) + Function f = FunctionFactory.getFunction(clazz, functionName); // BeanFunction.getFunction(clazz,functionName) + if (f == null && exception) throw new JspTagException("No function '" + functionName + "' in class '" + className + "'"); + return f; } catch (Exception e) { // possible execptions thrown when instantiating bean functions: // IllegalArgumentException, IllegalAccessException, InstantiationException, InvocationTargetException @@ -198,10 +213,11 @@ log.debug("Node-referrer?"); if (container != Attribute.NULL || "".equals(parentNodeId.getValue(this)) || functionName == null) { // explicitit container log.debug("explicitely not"); - FunctionContainerTag functionContainer = (FunctionContainerTag) findParentTag(FunctionContainer.class, (String) container.getValue(this), false); + FunctionContainerTag functionContainer = findParentTag(FunctionContainerTag.class, (String) container.getValue(this), false); if (functionContainer != null) { - function = functionContainer.getFunction(functionName); - return function; + Function f = functionContainer.getFunction(functionName); + if (f == null && exception) throw new JspTagException("No function '" + functionName + "' in function container tag '" + functionContainer + "'"); + return f; } else { // ignore. } @@ -222,16 +238,22 @@ if (functionOrNode instanceof NodeProvider) { // wow, indeed, that we are going to use log.debug("using node-function!"); Node node = ((NodeProvider) functionOrNode).getNodeVar(); - return node != null ? node.getFunction(functionName) : null; + if (exception && node == null) throw new JspTagException("No node to get function '" + functionName + "' from"); + Function f = node != null ? node.getFunction(functionName) : null; + if (exception && f == null) throw new JspTagException("No function '" + functionName + "' in node " + node); + return f; } else { // just use the functioncontainer return ((FunctionContainerTag) functionOrNode).getFunction(functionName); } } else { Node node = getNodeFromPageContext(); if (node == null) { + if (exception) throw new JspTagException("No node to get function '" + functionName + "' from"); return null; } else { - return node.getFunction(functionName); + Function f = node.getFunction(functionName); + if (exception && f == null) throw new JspTagException("No function '" + functionName + "' in node " + node); + return f; } } } @@ -255,7 +277,7 @@ } else { log.debug("Trying self for function " + functionName); // name given, try self: - function = getFunction(functionName); + function = getFunction(functionName, true); if (function == null) { throw new NotFoundException("Could not find function with the name '" + functionName + "'"); } _______________________________________________ Cvs mailing list Cvs@lists.mmbase.org http://lists.mmbase.org/mailman/listinfo/cvs