Hi Sergey, thanks for your answer. I think a good solution could be to pass the ParamConverter a string containing all the values of a multi-valued query parameter, and let the user build the collection object. So, if I have a query string like: MY_PARAM=VALUE_1&FOO=BAR&MY_PARAM=VALUE_2, the ParamConvert should receive the string MY_PARAM=VALUE_1&MY_PARAM=VALUE_2, and the user should build the collection in in the fromString() method. In this way the user can deal with both the whole collection and its single values. I also suggest this behaviour should be activated through a property in order not to break backward compatibility. What do you think?
Thanks, Diego 2016-10-17 11:47 GMT+02:00 Sergey Beryozkin <sberyoz...@gmail.com>: > Hi > > Thanks for this query, let me redirect to the CXF users list. > > FYI, CXF JAX-RS runtime prepares a List itself and only expects > ParamConverters if any to convert individual values. > > I believe RI (Jersey) will also act the same way - but I may be wrong now. > You can check a "ParamConverter and Collections" thread on the jaxrs users > list. My understanding there was no any agreement reached. > > Cheers, Sergey > > > On 16/10/16 23:48, Diego Ruotolo wrote: > >> Hi everybody, >> >> this is my first post to this mailing list. >> I am using Apache CXF and I have the following problem: I need to read a >> multiple-value query parameter that is written in a >> comma-separated-values (CSV) format, hence non standard HTTP way. >> I know that this will be fixed in versions 3.1.8 and 3.2.0 with the >> contextual property "parse.query.value.as.collection", as written here: >> https://issues.apache.org/jira/browse/CXF-6941 >> but the above solution works for ALL query parameters, I want to be >> selective, for instance I just want query parameters annotated with >> @MyAnnotation to be parsed as CSV collection, other query parameters may >> accept commas as a value. >> Therefore I've written a ParamConverter provided by a >> ParamConverterProvider: the latter reads the annotation and returns the >> appriopriate ParamConverter that converts a String into a List. But this >> is not working since the returned List is used as first element of the >> linked method parameter, so in the end I have a List of List. >> >> Example: >> >> Query parameter: MY_PARAM=VALUE_1,VALUE_2,VALUE_3 >> Method parameter: List<?> myParam; // Here I put "?" instead of "String" >> as generic type in order to explain this example >> ParamConverter fromString() method: return >> Arrays.asList(value.split(",")); //returns a List<String> >> Expected result: myParam is a List<String>, a list of 3 elements >> (VALUE_1, VALUE_2, VALUE_3) >> Actual result: myParam is a List<List<String>>, a list with one element, >> this single element is a list of 3 elements (VALUE_1, VALUE_2, VALUE_3) >> >> It seems that when used in conjuction with a List (a Collection?) method >> parameter, a ParamConverter works per-element, not for the whole list. >> Is this the correct behaviour? Do you know some work-around that I could >> use without writing an Apache CXF Interceptor (I don't want to be bound >> to an implementation of JAX-RS) ? >> I've noticed that Jersey has a similar issue too: >> https://java.net/jira/browse/JERSEY-2763 >> >> Thanks in advice, >> >> best regards >> > > > -- > Sergey Beryozkin > > Talend Community Coders > http://coders.talend.com/ >