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.