Hi all,
I'm having a little trouble with a dynamically filtered route.
My route is defined in Spring as follows:
<!--The came route used to retrieve packets for the gui. Can be altered -->
    <camelContext id="camelContextBean"
xmlns="http://camel.apache.org/schema/spring";>
        <route id="fromJmsProcessedParametersOut" autoStartup="false">
            <from uri="jms:topic:processedParametersOut" />
                <camel:filter>
                    <camel:method bean="parameterFilterer"></camel:method>
                </camel:filter>
            <to uri="bean:camelParameterProvider?method=parameterIn" />
        </route>
    </camelContext>

The filter bean has a method called matches which is being called by
camel. The method is as follows:

public final boolean matches(@Header("ParameterName") final String
headerParameterName) {
    boolean result = false;

    if (this.parameterNames == null) {
        result = true;
    }
    else if (parameterNames.size() > 0) {
        for (String parameterName : parameterNames) {
            System.out.println(parameterName + " : " + headerParameterName);
            // if the filter name matches the parameter in this message header
            if (StringUtils.equals(parameterName, headerParameterName)) {
                System.out.println("Filter match for " + parameterName
+ " : " + headerParameterName);
                result = true;
            }
        }
    }

    System.out.println("Returning " + result);
    return result;
}


Now, according to the System outs the returns are correct. If I change
the parameterNames Set at runtime the filter processes the list and
returns the correct true or false flag. The problem is that Camel
still routes every message.

Can anybody see any reason why this design will not work or whether
I've missed something in implementing it.

Thanks!

Reply via email to