Re: Marshalling REST Query Parameter directly into Integer Array

2011-10-04 Thread Sergey Beryozkin


See comments inline

On 04/10/11 09:33, Kiren Pillay wrote:

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

Right, see why would one want to get ParameterHandler> 
working.


I think

> http://localhost:8080/testMyRest/time?i=1&i=2&i=3

is reasonable too and is generally better supported. Besides, in many 
cases humans don't type those queries manually, forms/scripts/code does 
that :-)



One thing you may want to do, if you'd like to support
?index=1,2,3 and List, is to get a RequestHandler registered 
instead which would


get Message.QUERY_STRING from the current CXF Message, such as 
'index=1,2,3' and convert it into "index=1&index=2&index=3" and reset on 
the same Message, it will be computationally very cheap and will

help with avoiding parsing "1,2,3" in the actual application code

One other thing, have a look at
http://cxf.apache.org/docs/jax-rs-advanced-features.html#JAX-RSAdvancedFeatures-FIQLsearchqueries

That feature really needs to get more attention again as IMHO it can 
become a very useful one...


Cheers, Sergey



Regards
Kiren
On Mon, Oct 3, 2011 at 5:11 PM, Sergey Beryozkin  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
  wrote:


Hi

When we have List, it is the runtime that manages the
instantiation of List and it would look for ParameterHandler
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:
--


 

 


 
 
 
 
  
 

  
 



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
  list)
{
String tmp = list.toString();
/*
 * for (Integer integer : list) { tmp+=":"+integer; }
 */

DateFormatter formatter = new DateFormatter("dd/MM/
hh:mm:ss");

return tmp
+
formatter.print(Calendar.getInstance().getTime(),
Locale.getDefault());
}
}


On Fri, Sep 30, 2011 at 4:47 PM, Kiren Pillay
  wrote:


Hi Sergery,

List  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
  wrote:


Hi

There was a minor issue to do with handling arrays such as Integer[],
but I
can see no problems with List. I committed a test involving
List  &  Integer[].
Not sure why you see a problem with List
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.

[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 Listbut 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
  wrote:


Hi

Listmust be supported, I'll add a tes

Re: Marshalling REST Query Parameter directly into Integer Array

2011-10-04 Thread Kiren Pillay
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  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
>>  wrote:
>>>
>>> Hi
>>>
>>> When we have List, it is the runtime that manages the
>>> instantiation of List and it would look for ParameterHandler
>>> 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:
 --

 
     

     >>> class="za.co.vodacom.pams.core.common.cxf.IntegerListParameterHandler"
 />


     
         
             
         
          
         

          
     
 


 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
  list)
 {
                String tmp = list.toString();
                /*
                 * for (Integer integer : list) { tmp+=":"+integer; }
                 */

                DateFormatter formatter = new DateFormatter("dd/MM/
 hh:mm:ss");

                return tmp
                                +
 formatter.print(Calendar.getInstance().getTime(),
                                                Locale.getDefault());
        }
 }


 On Fri, Sep 30, 2011 at 4:47 PM, Kiren Pillay
  wrote:
>
> Hi Sergery,
>
> List    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
>  wrote:
>>
>> Hi
>>
>> There was a minor issue to do with handling arrays such as Integer[],
>> but I
>> can see no problems with List. I committed a test involving
>> List    &    Integer[].
>> Not sure why you see a problem with List
>> 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.
>>>
>>> [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      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
>>>  wrote:

 Hi

 List      must be supported, I'll add a test for Integer[],
 have you
 tried int[] ?

 Cheers, Sergey

>>>

Re: Marshalling REST Query Parameter directly into Integer Array

2011-10-03 Thread Sergey Beryozkin
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  wrote:

Hi

When we have List, it is the runtime that manages the
instantiation of List and it would look for ParameterHandler
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:
--


 

 


 
 
 
 
  
 

  
 



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") Listlist)
{
String tmp = list.toString();
/*
 * for (Integer integer : list) { tmp+=":"+integer; }
 */

DateFormatter formatter = new DateFormatter("dd/MM/
hh:mm:ss");

return tmp
+
formatter.print(Calendar.getInstance().getTime(),
Locale.getDefault());
}
}


On Fri, Sep 30, 2011 at 4:47 PM, Kiren Pillay
  wrote:


Hi Sergery,

Listworks well, thanks for your help:)

Moved to 2.4.2 also.

Regards
Kiren

On Thu, Sep 29, 2011 at 2:33 PM, Sergey Beryozkin
  wrote:


Hi

There was a minor issue to do with handling arrays such as Integer[],
but I
can see no problems with List. I committed a test involving
List&Integer[].
Not sure why you see a problem with List
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.

[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  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
  wrote:


Hi

List  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{
@Override
public Integer[] fromString(String arg0) {

3. The parameter handler is registered, however its not picked up
when
I do the query:

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

  

Re: Marshalling REST Query Parameter directly into Integer Array

2011-10-03 Thread Kiren Pillay
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  wrote:
> Hi
>
> When we have List, it is the runtime that manages the
> instantiation of List and it would look for ParameterHandler
> 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:
>> --
>>
>> 
>>     
>>
>>     > class="za.co.vodacom.pams.core.common.cxf.IntegerListParameterHandler"
>> />
>>
>>
>>     
>>         
>>             
>>         
>>          
>>         
>>
>>          
>>     
>> 
>>
>>
>> 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  list)
>> {
>>                String tmp = list.toString();
>>                /*
>>                 * for (Integer integer : list) { tmp+=":"+integer; }
>>                 */
>>
>>                DateFormatter formatter = new DateFormatter("dd/MM/
>> hh:mm:ss");
>>
>>                return tmp
>>                                +
>> formatter.print(Calendar.getInstance().getTime(),
>>                                                Locale.getDefault());
>>        }
>> }
>>
>>
>> On Fri, Sep 30, 2011 at 4:47 PM, Kiren Pillay
>>  wrote:
>>>
>>> Hi Sergery,
>>>
>>> List  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
>>>  wrote:

 Hi

 There was a minor issue to do with handling arrays such as Integer[],
 but I
 can see no problems with List. I committed a test involving
 List  &  Integer[].
 Not sure why you see a problem with List
 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.
>
> [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    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
>  wrote:
>>
>> Hi
>>
>> List    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      {
>>>        @Override
>>>        public Integer[] fromString(String arg0) {
>>>
>>> 3. The parameter handler is registered, however its not picked up
>>> when
>>> I do the query:
>>>
>>>  [I cannot be cast to [Ljava.lang.Object;
>>>
>>>
>>>
>>> org.apache.cxf.jaxrs.utils.InjectionUtils.addToCollectionValues(InjectionUtils.java:752)
>>>
>>>
>

Re: Marshalling REST Query Parameter directly into Integer Array

2011-10-03 Thread Sergey Beryozkin

Hi

When we have List, it is the runtime that manages the 
instantiation of List and it would look for ParameterHandler
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:
--


 

 


 
 
 
 
  
 

  
 



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  list) {
String tmp = list.toString();
/*
 * for (Integer integer : list) { tmp+=":"+integer; }
 */

DateFormatter formatter = new DateFormatter("dd/MM/ 
hh:mm:ss");

return tmp
+ 
formatter.print(Calendar.getInstance().getTime(),
Locale.getDefault());
}
}


On Fri, Sep 30, 2011 at 4:47 PM, Kiren Pillay  wrote:

Hi Sergery,

List  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  wrote:

Hi

There was a minor issue to do with handling arrays such as Integer[], but I
can see no problems with List. I committed a test involving
List  &  Integer[].
Not sure why you see a problem with List
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.

[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 Listbut 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
  wrote:


Hi

Listmust 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  {
@Override
public Integer[] fromString(String arg0) {

3. The parameter handler is registered, however its not picked up when
I do the query:

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



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












Re: Marshalling REST Query Parameter directly into Integer Array

2011-10-02 Thread Kiren Pillay
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:
--











 


 




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 list) {
String tmp = list.toString();
/*
 * for (Integer integer : list) { tmp+=":"+integer; }
 */

DateFormatter formatter = new DateFormatter("dd/MM/ 
hh:mm:ss");

return tmp
+ 
formatter.print(Calendar.getInstance().getTime(),
Locale.getDefault());
}
}


On Fri, Sep 30, 2011 at 4:47 PM, Kiren Pillay  wrote:
> Hi Sergery,
>
> List 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  
> wrote:
>> Hi
>>
>> There was a minor issue to do with handling arrays such as Integer[], but I
>> can see no problems with List. I committed a test involving
>> List & Integer[].
>> Not sure why you see a problem with List
>> 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.
>>>
>>> [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  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
>>>  wrote:

 Hi

 List  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    {
>        @Override
>        public Integer[] fromString(String arg0) {
>
> 3. The parameter handler is registered, however its not picked up when
> I do the query:
>
>  [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:
>                       
>                        
>                
>
> 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


>>
>>
>


Re: Marshalling REST Query Parameter directly into Integer Array

2011-09-30 Thread Kiren Pillay
Hi Sergery,

List 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  wrote:
> Hi
>
> There was a minor issue to do with handling arrays such as Integer[], but I
> can see no problems with List. I committed a test involving
> List & Integer[].
> Not sure why you see a problem with List
> 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.
>>
>> [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  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
>>  wrote:
>>>
>>> Hi
>>>
>>> List  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    {
        @Override
        public Integer[] fromString(String arg0) {

 3. The parameter handler is registered, however its not picked up when
 I do the query:

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

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


Re: Marshalling REST Query Parameter directly into Integer Array

2011-09-29 Thread Sergey Beryozkin

Hi

There was a minor issue to do with handling arrays such as Integer[], 
but I can see no problems with List. I committed a test 
involving List & Integer[].

Not sure why you see a problem with List
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.

[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  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  wrote:

Hi

List  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{
@Override
public Integer[] fromString(String arg0) {

3. The parameter handler is registered, however its not picked up when
I do the query:

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



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







Re: Marshalling REST Query Parameter directly into Integer Array

2011-09-28 Thread Kiren Pillay
Hi Sergey!

Tried int[], got the same error.

[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 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  wrote:
> Hi
>
> List 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  {
>>        @Override
>>        public Integer[] fromString(String arg0) {
>>
>> 3. The parameter handler is registered, however its not picked up when
>> I do the query:
>>
>>  [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:
>>                       
>>                        
>>                
>>
>> 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
>
>


Re: Marshalling REST Query Parameter directly into Integer Array

2011-09-28 Thread Sergey Beryozkin

Hi

List 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  {
@Override
public Integer[] fromString(String arg0) {

3. The parameter handler is registered, however its not picked up when
I do the query:

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



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




Marshalling REST Query Parameter directly into Integer Array

2011-09-28 Thread Kiren Pillay
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 {
@Override
public Integer[] fromString(String arg0) {

3. The parameter handler is registered, however its not picked up when
I do the query:

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



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