[ 
https://issues.apache.org/jira/browse/CXF-7267?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15898822#comment-15898822
 ] 

Daniel H. Peger commented on CXF-7267:
--------------------------------------

Thanks for looking into it :-)

> Member names must match bean attribute for BeanParam to work
> ------------------------------------------------------------
>
>                 Key: CXF-7267
>                 URL: https://issues.apache.org/jira/browse/CXF-7267
>             Project: CXF
>          Issue Type: Bug
>    Affects Versions: 3.1.4
>            Reporter: Daniel H. Peger
>            Priority: Minor
>
> I just ran into this problem on my first attempt to use {{@BeanParam}} and 
> got this exception:
> {noformat}
> java.lang.IllegalArgumentException: Unresolved variables; only 0 value(s) 
> given for 2 unique variable(s)
>       at 
> org.apache.cxf.jaxrs.impl.UriBuilderImpl.substituteVarargs(UriBuilderImpl.java:285)
>       at 
> org.apache.cxf.jaxrs.impl.UriBuilderImpl.doBuildUriParts(UriBuilderImpl.java:121)
> ...
> {noformat}
> My parameter bean looked like this:
> {code}package com.recommind.common.rest;
> import javax.ws.rs.PathParam;
> public final class ApplicationIdentifierParameter
> {
>   @PathParam("applicationId")
>   private String mApplicationId;
>   @PathParam("projectId")
>   private String mProjectId;
>   public String getApplicationId()
>   {
>     return mApplicationId;
>   }
>   public void setApplicationId(String aApplicationId)
>   {
>     mApplicationId = aApplicationId;
>   }
>   public String getProjectId()
>   {
>     return mProjectId;
>   }
>   public void setProjectId(String aProjectId)
>   {
>     mProjectId = aProjectId;
>   }
> }
> {code}
> I debugged {{UriBuilderImpl}} and found that in {{ClientProxyImpl:514}} the 
> to be evaluated members are identified by the names of the corresponding 
> setters.
> I think this is wrong - or at least inconvenient - as it is totally valid for 
> a bean's internals fields to have different names than the corresponding bean 
> attribute. To my knowledge the Bean spec only requires setters and getters to 
> match and does not care about the internal representation of the attributes.
> Rather than looking at the setters {{ClientProxyImpl}} should iterate over 
> the bean's fields, look for fields annotated with {{@PathParam}} and update 
> the field using reflection.
> *Workaround:*
> Annotate the setters with the {{@XXXParam}} annotations.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to