Hi

Thanks for sharing your use-case. I have created a ticket to work on
improving this
https://issues.apache.org/jira/browse/CAMEL-19186

On Wed, Mar 22, 2023 at 12:08 PM Svend Ole Nielsen <
svend-ole.niel...@addsecure.com> wrote:

> Hi - sorry for the late reply. Some money making stuff was a bit important.
>
> If I have a choice list like this:
>           <choice>
>                     <when>
>                         <simple>${header.type} ==
> ${type:Type.TYPE1}</simple>
>                         <to uri="direct:toType1Handler"/>
>                     </when>
>                     <when>
>                         <simple>${header.type} ==
> ${type:Type.TYPE2}</simple>
>                         <to uri="direct:toType2Handler"/>
>                     </when>
>                     <when>
>                         <simple>${header.type} ==
> ${type:Type.TYPE3}</simple>
>                         <to uri="direct:toType3Handler"/>
>                     </when>
>                     <otherwise>
>                         <log message="Don't know how to handle
> ${header.type} - ignoring" loggingLevel="WARN"/>
>                     </otherwise>
>                 </choice>
>
> With Type being:
>
>
>
>
>
>
> *public enum Type {    TYPE1("This is type 1"), TYPE2("This is type 
> 2"),TYPE3("This is type 3");*
>
>
> *    private final String description;*
>
>
>
>
>
>
>
>
>
>
> *    Type(String s) {        this.description = s;    }    @Override    
> public String toString() {        return description;    }*
>
>
>
> *}*
>
> The header 'type' is an actual enum and not a string.
>
> The method ObjectHelper.lookupConstantsFieldValue will do a comparison on
> all the field names and if found return the toString value of the field
> value. In this case is different than the default implementation of
> toString on enum which returns the name of the enum, thus the comparison in
> the choice list fails. It will always end up in the otherwise. If I were to
> use the default toString method it would work.
>
> For the above example, the lookupConstantsFieldValue will for the first
> choice be given the values (Type.class, "TYPE1") - then
> lookupConstantsFieldValue will find TYPE1 field in the Type class, get the
> actual enum and then return the toString on the value, which in this case
> will be "This is type 1" causing the comparison to fail although it found
> the right one.
>
> Hopefully it makes sense 🙂
>
>
>
>
> Svend Ole Nielsen Office +4596962640
> Developer svend-ole.niel...@addsecure.com
> www.addsecure.com
> <http://www.addsecure.com/> <https://www.facebook.com/AddSecure/>
> <https://www.linkedin.com/company/addsecure/>
> <https://www.youtube.com/channel/UC9RMhgoc3z23vy93yBRAygA>
> *For a safer and smarter world*
> NOTE: This e-mail (including any attachments) is for the sole use of the
> intended recipient(s) and may contain information that  confidential and/or
> protected by legal privilege. Any unauthorized review, use, copy,
> disclosure or distribution of this e-mail is strictly prohibited. If you
> are not the intended recipient, please notify AddSecure immediately and
> destroy all copies of this e-mail. AddSecure does not accept any liability
> for breach of security, error or virus that may result from the
> trans­mission of this message.
>
> ------------------------------
> *Fra:* Claus Ibsen <claus.ib...@gmail.com>
> *Sendt:* 15. marts 2023 12:33
> *Til:* users@camel.apache.org <users@camel.apache.org>
> *Emne:* Re: Enum comparing does not work when toString is overridden
>
> CAUTION: External email
> Hi
>
> Can you maybe post some more details such as a bit of code of your enums.
> As we could possible improve that code to deal with enums in a specific way.
>
> On Mon, Mar 6, 2023 at 12:30 PM Svend Ole Nielsen <
> svend-ole.niel...@addsecure.com> wrote:
>
> Hi
>
> I have been scratching my head for a couple of days wondering why my
> simple comparison in a choice list in Camel has always gone wrong. I'm
> comparing "complex" enums that have name and then a more human eatable
> name. This human eatable name is being printed out in an overridden
> toString method.
>
> Found out that if I don't override toString everything works fine. It
> looks like there is something fishy going on with the
> 'lookupConstantFieldValue' method in ObjectHelper class. It does some
> comparing on name and eventually returns toString. Would have thought it
> would make more sense to return name - seen as in a normal non-overridden
> tostring that returns name.
>
> Have searched Jira but found nothing related to this so wondering if I
> have stumpled upon a bug of some sorts
>
>
>
>
>
> Svend Ole Nielsen Office +4596962640
> Developer svend-ole.niel...@addsecure.com
> www.addsecure.com
> <http://www.addsecure.com/> <https://www.facebook.com/AddSecure/>
> <https://www.linkedin.com/company/addsecure/>
> <https://www.youtube.com/channel/UC9RMhgoc3z23vy93yBRAygA>
> *For a safer and smarter world*
> NOTE: This e-mail (including any attachments) is for the sole use of the
> intended recipient(s) and may contain information that  confidential and/or
> protected by legal privilege. Any unauthorized review, use, copy,
> disclosure or distribution of this e-mail is strictly prohibited. If you
> are not the intended recipient, please notify AddSecure immediately and
> destroy all copies of this e-mail. AddSecure does not accept any liability
> for breach of security, error or virus that may result from the
> trans­mission of this message.
>
>
>
> --
> Claus Ibsen
> -----------------
> @davsclaus
> Camel in Action 2: https://www.manning.com/ibsen2
>


-- 
Claus Ibsen
-----------------
@davsclaus
Camel in Action 2: https://www.manning.com/ibsen2

Reply via email to