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