Hi,

I am using cxf-bundle-jaxrs-2.2.

I tried registering it using

<jaxrs:providers>
      <bean id="intArrayProvider"
class="com.mycompany.services.rest.util.ArrayParamHandler"/>
</jaxrs:providers>

To make it work, I changed the method getAddressById () to take String
instead of Int[], and inside the method I am using ArrayParamHandler to
convert it to Int[] (using fromString(ids))

public AddressDetailCollection getAddressById(@PathParam ("addressIds")
String ids)

Rgds
Subh


Sergey Beryozkin-2 wrote:
> 
> Hi
> 
> What CXF version are you using ? Support for ParameterHandlers should be
> available in 2.1.4.
> How are you registering it ?
> 
> thanks, Sergey
> 
> 
> ----- Original Message ----- 
> From: "subh" <[email protected]>
> To: <[email protected]>
> Sent: Wednesday, March 25, 2009 3:38 PM
> Subject: RE: Passing array as a parameter in JAX-RS
> 
> 
>> 
>> Hi Sergey,
>> 
>> Thanks for your reply.
>> 
>> I tried the ParameterHandler way by creating a ArrayParamHandler class
>> for
>> my Integer[].
>> 
>> public Integer[] fromString(String ids)   {
>>      String[] idsArr = ids.split(",");
>>      return getIntArr(idsArr);
>> }
>> 
>> private Integer[] getIntArr(String[] arrStr)  {
>>      Integer[] arrInt = new Integer[arrStr.length];
>>      int i = 0;
>>      for (int k = 0; k < arrStr.length; k++)   {
>>         try  {
>>            arrInt[i] = Integer.valueOf(arrStr[k]);
>>            i++;
>>         }
>>         catch (Exception e)  {
>>            log.error(e.getMessage());
>>         }
>>      }
>>      return arrInt;
>>   }
>> 
>> But when I make a call like 
>> 
>> http://localhost:8080/rs/masterData/address/ids/6679,6689 
>> 
>> I am getting the following error
>> 
>> ##ERROR##
>> Mar 25, 2009 10:29:44 AM org.apache.cxf.jaxrs.utils.InjectionUtils
>> reportServerError
>> SEVERE: Parameter Class [Ljava.lang.Integer; has no constructor with
>> single
>> String parameter, static valueOf(String) or
>> fromString(String) methods
>> Mar 25, 2009 10:29:44 AM
>> org.apache.cxf.interceptor.LoggingOutInterceptor$LoggingCallback onClose
>> 
>> What am I doing wrong?
>> 
>> Rgds
>> Subh
>> 
>> 
>> Sergey Beryozkin-2 wrote:
>>> 
>>> Hi
>>> 
>>> How such an array is represented on the wire ?
>>> I reckon we can easily support values separated by space or indeed by
>>> some other separators which can be captured by a regular expression.
>>> 
>>> But at the moment you need to do some additional work.
>>> If it's XML then you might be able to use XmlJavaTypeAdapter [1]
>>> Otherwise you need to create a MessageBodyReader implementation, see for
>>> some samples at [2]
>>> 
>>> Actually, just looked again at your example :
>>> 
>>> If these ids are captured by queries like ?id=1&id=2&id=3
>>> or matrix values /ids;id=1;id=2;id=3 then you can do either 
>>> 
>>> @QueryParam("id") List<Integer> ids
>>> or 
>>> @MatrixParam("id") List<Integer> ids
>>> 
>>> Though it would be nice if we supported arrays in such cases too.
>>> 
>>> In your example you use @PathParam so it looks like the sequence is
>>> presented in one of the path segments like this : /ids/1+2+3+4+5
>>> 
>>> I think in this case you can register an instance of ParameterHandler,
>>> see the section at [3],
>>> which is a CXF extension and convert the string into the integer array 
>>> 
>>> Cheers, Sergey
>>> 
>>> [1]
>>> http://weblogs.java.net/blog/kohsuke/archive/2005/09/using_jaxb_20s.html
>>> 
>>> [2]
>>> http://cwiki.apache.org/CXF20DOC/jax-rs.html#JAX-RS-CustomMessageBodyPro
>>> viders
>>> [3]
>>> http://cwiki.apache.org/CXF20DOC/jax-rs.html#JAX-RS-DealingwithParameter
>>> s
>>> 
>>> -----Original Message-----
>>> From: subh [mailto:[email protected]] 
>>> Sent: 24 March 2009 21:18
>>> To: [email protected]
>>> Subject: Passing array as a parameter in JAX-RS
>>> 
>>> 
>>> I am new to JAX-RS and was trying to implement a simple service. 
>>> 
>>> But I am not sure how to go about sending an array into the REST URI for
>>> the
>>> below code
>>> 
>>>    @GET
>>>    @Path ("/address/ids/{addressIds}")
>>>    public AddressDetailCollection getAddressById(@PathParam
>>> ("addressIds") 
>>> Integer[] ids)
>>>    {
>>>       ......
>>>    }
>>> 
>>> 
>>> -- 
>>> View this message in context:
>>> http://www.nabble.com/Passing-array-as-a-parameter-in-JAX-RS-tp22690005p
>>> 22690005.html
>>> Sent from the cxf-user mailing list archive at Nabble.com.
>>> 
>>> 
>>> 
>> 
>> -- 
>> View this message in context:
>> http://www.nabble.com/Passing-array-as-a-parameter-in-JAX-RS-tp22690005p22704300.html
>> Sent from the cxf-user mailing list archive at Nabble.com.
>>
> 
> 

-- 
View this message in context: 
http://www.nabble.com/Passing-array-as-a-parameter-in-JAX-RS-tp22690005p22724484.html
Sent from the cxf-user mailing list archive at Nabble.com.

Reply via email to