When binding prefix not found, binding is treated as literal regardless of 
default prefix
-----------------------------------------------------------------------------------------

         Key: TAPESTRY-535
         URL: http://issues.apache.org/jira/browse/TAPESTRY-535
     Project: Tapestry
        Type: Bug
  Components: Framework  
    Versions: 4.0    
 Environment: Windows XP
    Reporter: Kent Tong


For a binding like this:

<component id="foo" type="Insert">
  <binding name="value" value="ognl:getCapitalized('a:b')"/>
</component>

works and will output "A:B". But if the ognl prefix is not specified (it is the 
default):

<component id="foo" type="Insert">
  <binding name="value" value="getCapitalized('a:b')"/>
</component>

Then it will output "getCapitalized('a:b')". That is, it is treating it as a 
literal, not an ognl.

This is because the BindingSource is misled by the colon in 'a:b' to believe 
that
the binding prefix "getCapitalized('a". So the prefix is unknown. Then it is 
treating
unknown prefix as literal:

public class BindingSourceImpl implements BindingSource
{
    public IBinding createBinding(IComponent component, String 
bindingDescription,
            String reference, String defaultPrefix, Location location)
    {
        String prefix = defaultPrefix;
        String path = reference;
        int colonx = reference.indexOf(':');
        if (colonx > 1) //Step1: blindingly looking for a colon
        {
            prefix = reference.substring(0, colonx);
            if (_factoryMap.containsKey(prefix))
                path = reference.substring(colonx + 1);
        }
        BindingFactory factory = (BindingFactory) _factoryMap.get(prefix); 
//Step2: unknown prefix
        if (factory == null)
            factory = _literalBindingFactory; //Step3: treat unknown prefix as 
literal
        return factory.createBinding(component, bindingDescription, path, 
location);
    }
}

I'd suggest that the prefix should be checked to see if it contains alphabet 
chars only. If yes, go
ahead with the existing logic. If not, it should be treated as no prefix is 
provided (so the default 
prefix should be used). For an unknown prefix, the existing logic can still be 
applied (or should
throw an exception?).


-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to