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 >>>> >>>> >> >> >