Thanks Sergei, I was on the wrong track, but thanks to your testcase I can see now that I should pass in array variables as: http://localhost:8080/testMyRest/time?index=1&index=2&index=3
and I was trying to achieve this kind of request (more human/tester friendly) http://localhost:8080/testMyRest/time?index=1,2,3 Regards Kiren On Mon, Oct 3, 2011 at 5:11 PM, Sergey Beryozkin <sberyoz...@gmail.com> wrote: > That works exactly the way I described :-), but you can easily double-check > it by havubg a breakpoint in > org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameter and you can see what > happens by running most of JAXRSUtilsTest, testCustomerParameter is one of > them > Sergey > > On 03/10/11 15:25, Kiren Pillay wrote: >> >> Okay, can you send me the name of a test case in the code where I can >> see how this works please? >> >> Regards >> Kiren >> >> >> On Mon, Oct 3, 2011 at 10:35 AM, Sergey Beryozkin<sberyoz...@gmail.com> >> wrote: >>> >>> Hi >>> >>> When we have List<SomeType>, it is the runtime that manages the >>> instantiation of List and it would look for ParameterHandler<SomeType> >>> only if SomeType does not have a suitable constructor or factory method. >>> It >>> will also be checked as a last resort if SomeType(String) constructor >>> throws >>> an exception, ex, Date(String) is problematic... >>> >>> Cheers, Sergey >>> >>> On 02/10/11 18:39, Kiren Pillay wrote: >>>> >>>> Hi Sergey, >>>> >>>> Apologies, I didn't test my app correctly. It looks like the >>>> ParameterHandler isn't working as it should. >>>> >>>> When I use a parameter of 1 for example, then it works. If I use a >>>> comma-separated list ("1,2,3") it fails saying: >>>> "02 Oct 2011 7:19:18 PM org.apache.cxf.jaxrs.utils.InjectionUtils >>>> handleParameter >>>> SEVERE: Class java.lang.Integer can not be instantiated using a >>>> constructor with a single String argument" >>>> >>>> When debugging, I notice that my custom ParameterHandler is not hit, >>>> maybe my ParameterHandler is not registered correctly? >>>> >>>> Here's my bean config snippet: >>>> -- >>>> >>>> <import resource="classpath:META-INF/cxf/cxf.xml"/> >>>> <context:component-scan base-package="za.co.kiren"/> >>>> >>>> <bean id="integerListParameterHandler" >>>> class="za.co.vodacom.pams.core.common.cxf.IntegerListParameterHandler" >>>> /> >>>> >>>> >>>> <jaxrs:server id="restContainer" address="/"> >>>> <jaxrs:serviceBeans> >>>> <ref bean="timeService"/> >>>> </jaxrs:serviceBeans> >>>> <jaxrs:providers> >>>> <ref bean="integerListParameterHandler" /> >>>> >>>> </jaxrs:providers> >>>> </jaxrs:server> >>>> </beans> >>>> >>>> >>>> Class: >>>> >>>> package za.co.kiren.testMyRest; >>>> >>>> import org.springframework.format.datetime.DateFormatter; >>>> import org.springframework.stereotype.Component; >>>> import org.springframework.stereotype.Service; >>>> >>>> import java.util.Calendar; >>>> import java.util.List; >>>> import java.util.Locale; >>>> >>>> import javax.ws.rs.GET; >>>> import javax.ws.rs.Path; >>>> import javax.ws.rs.Produces; >>>> import javax.ws.rs.QueryParam; >>>> >>>> @Component >>>> @Service("timeService") >>>> public class TimeService { >>>> @GET >>>> @Produces("text/plain") >>>> @Path("/time") >>>> public String getDateTime(@QueryParam("index") List<Integer> >>>> list) >>>> { >>>> String tmp = list.toString(); >>>> /* >>>> * for (Integer integer : list) { tmp+=":"+integer; } >>>> */ >>>> >>>> DateFormatter formatter = new DateFormatter("dd/MM/yyyy >>>> hh:mm:ss"); >>>> >>>> return tmp >>>> + >>>> formatter.print(Calendar.getInstance().getTime(), >>>> Locale.getDefault()); >>>> } >>>> } >>>> >>>> >>>> On Fri, Sep 30, 2011 at 4:47 PM, Kiren Pillay<kirenpill...@gmail.com> >>>> wrote: >>>>> >>>>> Hi Sergery, >>>>> >>>>> List<Integer> works well, thanks for your help:) >>>>> >>>>> Moved to 2.4.2 also. >>>>> >>>>> Regards >>>>> Kiren >>>>> >>>>> On Thu, Sep 29, 2011 at 2:33 PM, Sergey Beryozkin<sberyoz...@gmail.com> >>>>> wrote: >>>>>> >>>>>> Hi >>>>>> >>>>>> There was a minor issue to do with handling arrays such as Integer[], >>>>>> but I >>>>>> can see no problems with List<Integer>. I committed a test involving >>>>>> List<Integer> & Integer[]. >>>>>> Not sure why you see a problem with List<Integer> >>>>>> Can you try 2.4.2 please ? >>>>>> Sergey >>>>>> >>>>>> On 28/09/11 17:34, Kiren Pillay wrote: >>>>>>> >>>>>>> Hi Sergey! >>>>>>> >>>>>>> Tried int[], got the same error. >>>>>>> >>>>>>> <detail>[I cannot be cast to [Ljava.lang.Object; >>>>>>> >>>>>>> >>>>>>> >>>>>>> org.apache.cxf.jaxrs.utils.InjectionUtils.addToCollectionValues(InjectionUtils.java:752) >>>>>>> >>>>>>> >>>>>>> >>>>>>> org.apache.cxf.jaxrs.utils.InjectionUtils.injectIntoCollectionOrArray(InjectionUtils.java:740) >>>>>>> >>>>>>> >>>>>>> I also tried List<Integer> but that also failed with the same >>>>>>> error. >>>>>>> >>>>>>> Is there anything special with the provider configuration maybe? >>>>>>> (using >>>>>>> 2.4.1). >>>>>>> >>>>>>> >>>>>>> >>>>>>> On Wed, Sep 28, 2011 at 5:41 PM, Sergey >>>>>>> Beryozkin<sberyoz...@gmail.com> >>>>>>> wrote: >>>>>>>> >>>>>>>> Hi >>>>>>>> >>>>>>>> List<Integer> must be supported, I'll add a test for Integer[], >>>>>>>> have you >>>>>>>> tried int[] ? >>>>>>>> >>>>>>>> Cheers, Sergey >>>>>>>> >>>>>>>> On 28/09/11 15:42, Kiren Pillay wrote: >>>>>>>>> >>>>>>>>> Hi >>>>>>>>> >>>>>>>>> This is an old problem, but I can't seem to find a solution posted >>>>>>>>> anywhere. I want to marshall a comma-separated list of integers >>>>>>>>> directly into an Integer []. >>>>>>>>> >>>>>>>>> 1. Service: >>>>>>>>> >>>>>>>>> public Response getCounters( >>>>>>>>> @QueryParam("msisdn") Long msisdn, >>>>>>>>> @QueryParam("counters") Integer [] counters, >>>>>>>>> @QueryParam("subscriberIdType") String >>>>>>>>> subscriberIdType) >>>>>>>>> >>>>>>>>> 2. I've written a ParameterHandler for this : >>>>>>>>> >>>>>>>>> public class IntegerArrayParameterHandler implements >>>>>>>>> ParameterHandler<Integer[]> { >>>>>>>>> @Override >>>>>>>>> public Integer[] fromString(String arg0) { >>>>>>>>> >>>>>>>>> 3. The parameter handler is registered, however its not picked up >>>>>>>>> when >>>>>>>>> I do the query: >>>>>>>>> >>>>>>>>> <detail>[I cannot be cast to [Ljava.lang.Object; >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> org.apache.cxf.jaxrs.utils.InjectionUtils.addToCollectionValues(InjectionUtils.java:752) >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> org.apache.cxf.jaxrs.utils.InjectionUtils.injectIntoCollectionOrArray(InjectionUtils.java:740) >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> org.apache.cxf.jaxrs.utils.InjectionUtils.createParameterObject(InjectionUtils.java:807) >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> org.apache.cxf.jaxrs.utils.JAXRSUtils.readQueryString(JAXRSUtils.java:947) >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> org.apache.cxf.jaxrs.utils.JAXRSUtils.createHttpParameterValue(JAXRSUtils.java:649) >>>>>>>>> >>>>>>>>> Is there a way to get this to work? >>>>>>>>> >>>>>>>>> 4. I've Registered the Provider: >>>>>>>>> ---- >>>>>>>>> <ref bean="integerArrayParameterHandler" /> >>>>>>>>> </jaxrs:providers> >>>>>>>>> >>>>>>>>> The easiest solution is to just use the String value and parse it >>>>>>>>> inside my code,( which is probably why there are not many posts on >>>>>>>>> this:). >>>>>>>>> >>>>>>>>> Regards >>>>>>>>> Kiren >>>>>>>> >>>>>>>> >>>>>> >>>>>> >>>>> >>> >>> > >