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

Bernhard Unger commented on CAMEL-15370:
----------------------------------------

Hi Chandrakant,

Spring MVC ist using a "MultiValueMap" to solve this problem. See 
[https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/util/MultiValueMap.html]

Also available from google commons is com.google.common.collect.HashMultimap

These maps simply allowing multiple identical keys.

I think this could be a possibility for fixing the problem.

We implemented a workarround so far:
{code:java}
private HashMultimap<String, String> createParamsMultimap(String queryString, 
String charset)private HashMultimap<String, String> createParamsMultimap(String 
queryString, String charset) throws UnsupportedEncodingException { 
HashMultimap<String, String> queryMap = HashMultimap.create(); for (String 
param : queryString.split("&")) { String[] pair = param.split("=", 2); if 
(pair.length == 2) { String name = URLDecoder.decode(pair[0], charset); String 
value = URLDecoder.decode(pair[1], charset); queryMap.put(name, value); } else 
{ throw new IllegalArgumentException("Invalid parameter, expected to be a pair 
but was " + param); } }
 return queryMap; }

{code}

Disadvantage indeed is that we must implement a new Map Interface, otherwise we 
would break Camels API.
Maybe you find a cleaner backward compatible way for the fix?

Kind regards

Bernhard

> CxfRsProducer: All but last value of query parameter with multiple values are 
> lost
> ----------------------------------------------------------------------------------
>
>                 Key: CAMEL-15370
>                 URL: https://issues.apache.org/jira/browse/CAMEL-15370
>             Project: Camel
>          Issue Type: Bug
>          Components: came-cxf
>    Affects Versions: 3.3.0
>            Reporter: Frank Denninger
>            Assignee: Freeman Yue Fang
>            Priority: Major
>             Fix For: 3.5.0
>
>         Attachments: CAMEL-15370.patch, CAMEL-15370_Chandra.patch
>
>
> If using a query parameter name multiple times, only the last value is 
> actually used.
>  
> e.g.  .to("cxfrs:[http://example.com/]";) with Exchange value 
> Exchange.HTTP_QUERY id=1&id=2 will call to example.com with id=2
>  
> As far as i can tell the problem is caused by 
> CxfRsProducer::getQueryParametersFromQueryString. In the method all query 
> paramters are inserted in a map, and only the last use of a parameter name is 
> preserved.
>  
> One solution would be to insert the values directy into the client field, 
> skipping the Map.
>  



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to