[ 
https://issues.apache.org/jira/browse/CAMEL-4959?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13217530#comment-13217530
 ] 

Babak Vahdat commented on CAMEL-4959:
-------------------------------------

IMHO the changes introduced by of this ticket causes regression failure. To 
avoid null values being misinterpreted as cache misses we do now convert e.g.

Float.NaN => (Byte) 0

which was not the case before.

Why not just simply *not* mark the conversion as miss *if* the conversion 
result is (Float.NaN / Double.NaN  ==> null). That's do *not* add any entry for 
such conversion results into the misses cache and revert back ObjectConverter 
to what it was before. Does this make sense to you?

And I simply don't get why the misses cache is a ConcurrentMap:

{code} 
protected final ConcurrentMap<TypeMapping, TypeMapping> misses = new 
ConcurrentHashMap<TypeMapping, TypeMapping>();
{code} 

To my understanding

{code} 
protected final List<TypeMapping> misses = new 
CopyOnWriteArrayList<TypeMapping>();
{code} 

would be just fine! Why do we need a Map to memorize the cache misses? Where we 
then do things like

{code} 
misses.put(key, key);
{code}

On it which is not really intuitive while reading the code, is this maybe 
because ideally we want to do lookup by the misses cache (misses.containsKey()) 
in O(1) instead of O(N)? 

See also:

http://camel.465427.n5.nabble.com/ObjectConverter-problem-td5517376.html
                
> Incorrect caching type converter misses for NaN
> -----------------------------------------------
>
>                 Key: CAMEL-4959
>                 URL: https://issues.apache.org/jira/browse/CAMEL-4959
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-core
>    Affects Versions: 2.8.3
>            Reporter: Andrey Utkin
>            Assignee: Claus Ibsen
>            Priority: Minor
>             Fix For: 2.8.5, 2.9.1, 2.10.0
>
>
> When converting Double or Float with value NaN, 
> org.apache.camel.converter.ObjectConverter returns "null". But 
> org.apache.camel.impl.converter.BaseTypeConverterRegistry.doConvertTo(Class, 
> Exchange, Object) interpret this "null" as "suitable conversion not found" 
> and cache misses. This lead to completely forgetting of conversion for given 
> types.
> For example, when conversing Double to Long, all works until Double is NaN. 
> After that, conversion for "Double-to-Long" marked as misses. And  camel stop 
> do any conversion for Double-to-Long until restart.
> Possible solution is to modify ObjectConverter`s methods to return 
> "Void.TYPE" instead of "null" for NaN.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to