cxf-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Kiren Pillay <kirenpill...@gmail.com>
Subject Re: Marshalling REST Query Parameter directly into Integer Array
Date Mon, 03 Oct 2011 14:25:21 GMT
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 <sberyozkin@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<kirenpillay1@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<sberyozkin@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<sberyozkin@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
>>>>>>
>>>>>>
>>>>
>>>>
>>>
>
>

Mime
View raw message