camel-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Petr Janata (JIRA)" <>
Subject [jira] [Created] (CAMEL-6807) Message headers with uppercase letters not matched by jxpath
Date Tue, 01 Oct 2013 12:24:24 GMT
Petr Janata created CAMEL-6807:

             Summary: Message headers with uppercase letters not matched by jxpath
                 Key: CAMEL-6807
             Project: Camel
          Issue Type: Bug
          Components: camel-core
    Affects Versions: 2.10.4
         Environment: JXPath used as Expression language
            Reporter: Petr Janata

{{DefaultMessage}} uses {{CaseInsensitiveMap}} for storing headers. If header name contains
uppercase characters, then jxpath expression with correct case will not match.

E.g. header named _fooBarBaz_ on "in" message will not be matched by following jxpath expression:
<jxpath>/in/headers/fooBarBaz = something</jxpath>
JXPath evaluates nodes that match the fooBarBaz name and uses the keySet() to obtain candidates.
The problem is that CaseInsensitiveMap.keySet() returns the converted internal keys, instead
of the original keys.

*Is it possible to override the keySet() method of CaseInsensitiveMap to return the original
keys?* Then a user will not be unpleasantly surprised that his key is not in the key set.

public Set<String> keySet()
    return originalKeys.values();

There are two workarounds possible but neither of them is nice in my eyes.
# use only lowercase header names
# register custom DynamicPropertyHandler in JXPath

Ad 1. this probably wasn't the intention. User must rely on implementation of private method
{{CaseInsensitiveMap.assembleKey()}}. This then defeats the purpose of case insensitiveness.

Ad 2. custom property handler must be registered via {{JXPathIntrospector.registerDynamicClass()}}
"in the start", e.g. before anybody calls {{JXPathIntrospector.getBeanInfo()}}. In our projects
it was enough to declare an extra eagerly-instantiated singleton Spring bean.
<bean class="biz.wss.camel.prophandlers.CaseInsensitiveMapPropertyHandler"
		lazy-init="false" />

This message was sent by Atlassian JIRA

View raw message