Hi,
I am trying to call Apaches' StringUtils class from my spring XML route file.
I got to with the following code.
<bean id="ExtnFieldServ"
class="com.ericsson.tcrm.bil.customizations.util.ExtendedFieldManagerRouteBean"
/> <!-just for reference-->
<choice>
<when>
<simple>
${bean:org.apache.commons.lang.StringUtils?method=isNotEmpty(${bean:ExtnFieldServ?method=getFieldValueFromExchange(*,in.header.PA_CONTEXT,PaymentMethod)})}
</simple>
<!-stuff happens here-->
</when>
</ choice>
This worked fine when bean:ExtnFieldServ?method=getFieldValueFromExchange
returned a non-null value. But failed with null.
Got the following exception
org.apache.camel.component.bean.MethodNotFoundException: Method with name:
isNotEmpty() (with no parameters) not found on bean:
org.apache.commons.lang.StringUtils@3030debe of type:
org.apache.commons.lang.StringUtils. Exchange[Message:
com.ericsson.etelcrm.bil.common.exec.SessionContext@1bec93f]
So basically camel was looking for a no parameter method when the actual
argument evaluated to null. This is very strange. I don't know if this is
normal behavior or a bug.
So I had to think of another way to get the code to work. A couple of
workarounds would work. One of which is posted below.
<setProperty propertyName="CC_TMP_PAYMM">
<simple>
${bean:ExtnFieldServ?method=getFieldValueFromExchange(*,in.header.PA_CONTEXT,PaymentMethod)}
</simple>
</setProperty>
<choice>
<when>
<simple>
${bean:org.apache.commons.lang.StringUtils?method=isNotEmpty(property.CC_TMP_PAYMM)}
</simple>
<!-stuff happens here-->
</when>
</ choice>
I went with property, the same approach can be taken with headers. Or I can
create wrapper class around StringUtils which will have methods like below, and
I would need to declare this wrapper as spring bean or use directly if I can
using statics.
public boolean isNotBlank()
{
return isNotBlank(null);
}
public boolean isEmpty(String value)
{
return org.apache.commons.lang.StringUtils.isEmpty(value);
}
What I really wanna know if why Camel is looking for a no parameter method
when the parameter expression evaluates to null?
Regards,
Ankit Bakshi