You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@wicket.apache.org by Fabio Fioretti <wi...@gmail.com> on 2016/04/27 12:07:59 UTC

[wicketstuff-restannotations] AbstractRestResource.toObject makes it impossible for mapped methods to know a parameter conversion went wrong.

Hi all,

Please consider the following simple implementation of AbstractRestResource
(6.22.0):

@ResourcePath("/rest/api")
public class MyRestResource extends
AbstractRestResource<JsonWebSerialDeserial>
{

 public MyRestResource ()
 {
  super(new JsonWebSerialDeserial(new GsonObjectSerialDeserial()));
 }

 @MethodMapping(value = "/offices")
 public List<Office> findOffices(
   @RequestParam(value = "region", required = false) Integer regionId)
 {
  return findOfficesByRegion(regionId);
 }
}

My question relates to the findOffices method and its filtering regionId
parameter when the value is not a valid integer. For example, consider the
request 'GET /rest/api/offices?region=AA'.

At the second step of AbstractRestResource.handleMethodExecution,
extractMethodParameters is invoked, which in turn triggers the conversion
of all parameters through the static method toObject.

When the conversion goes wrong and ConversionException is thrown, toObject
catches it, sets the response status to 400 and returns null!

Now, when my findOffices is finally executed, I get a null regionId but I
don't know whether it was not valid or the parameter was not present at
all. Checking the response status downstream is also particularly hard
because I have no getStatus (Tomcat 6 here, ouch!).

To my mind, findOffices should return null instead of the unfiltered list
of offices if the conversion went wrong, even because the response
status is 400 (as set by toObject). However, how can I know it?

Any suggestions?

Many thanks,
Fabio

Re: [wicketstuff-restannotations] AbstractRestResource.toObject makes it impossible for mapped methods to know a parameter conversion went wrong.

Posted by Andrea Del Bene <an...@gmail.com>.
You're welcome!

On 10/05/2016 15:06, Fabio Fioretti wrote:
> I confirm version 6.23.0 fixed the problem.
>
> Thank you for the great support!
>
> Kind regards,
> Fabio
>
> On Thu, Apr 28, 2016 at 12:02 PM, Fabio Fioretti <
> windom.macrosorch@gmail.com> wrote:
>
>> Thanks Andrea, that would be excellent!
>>
>> Keep up the great work,
>> Fabio
>>
>> On Thu, Apr 28, 2016 at 11:52 AM, Andrea Del Bene <an...@gmail.com>
>> wrote:
>>
>>> Thank you for the issue! I think we can make it for next release 6.23.0
>>> which should come quite soon (at the moment we are voting to release Wicket
>>> 6.23.0).
>>>
>>> Andrea.
>>>
>>>
>>> On 28/04/2016 11:34, Fabio Fioretti wrote:
>>>
>>>> Done: https://github.com/wicketstuff/core/issues/490
>>>>
>>>> Many thanks,
>>>> Fabio
>>>>
>>>> On Thu, Apr 28, 2016 at 11:03 AM, Martin Grigorov <
>>>> martin.grigorov@gmail.com
>>>>
>>>>> wrote:
>>>>> Please file an issue at Wicketstuff GibHub.
>>>>> On Apr 28, 2016 10:31 AM, "Fabio Fioretti" <windom.macrosorch@gmail.com
>>>>> wrote:
>>>>>
>>>>> Hi Martin,
>>>>>> Thanks, I agree - findOffices() shouldn't be executed at all. In fact,
>>>>>> handleMethodExecution() returns before invoking application code in all
>>>>>> other cases (step 1 for unauthorized access, step 3 for validation
>>>>>>
>>>>> errors).
>>>>>
>>>>>> Any chance to have it fixed relatively soon? (maybe Andrea can answer
>>>>>>
>>>>> this)
>>>>>
>>>>>> Kind regards,
>>>>>> Fabio
>>>>>>
>>>>>> On Thu, Apr 28, 2016 at 6:44 AM, Martin Grigorov <mgrigorov@apache.org
>>>>>> wrote:
>>>>>>
>>>>>> Hi,
>>>>>>>
>>>>>>> On Wed, Apr 27, 2016 at 12:07 PM, Fabio Fioretti <
>>>>>>> windom.macrosorch@gmail.com> wrote:
>>>>>>>
>>>>>>> Hi all,
>>>>>>>> Please consider the following simple implementation of
>>>>>>>>
>>>>>>> AbstractRestResource
>>>>>>>
>>>>>>>> (6.22.0):
>>>>>>>>
>>>>>>>> @ResourcePath("/rest/api")
>>>>>>>> public class MyRestResource extends
>>>>>>>> AbstractRestResource<JsonWebSerialDeserial>
>>>>>>>> {
>>>>>>>>
>>>>>>>>    public MyRestResource ()
>>>>>>>>    {
>>>>>>>>     super(new JsonWebSerialDeserial(new GsonObjectSerialDeserial()));
>>>>>>>>    }
>>>>>>>>
>>>>>>>>    @MethodMapping(value = "/offices")
>>>>>>>>    public List<Office> findOffices(
>>>>>>>>      @RequestParam(value = "region", required = false) Integer
>>>>>>>>
>>>>>>> regionId)
>>>>>>    {
>>>>>>>>     return findOfficesByRegion(regionId);
>>>>>>>>    }
>>>>>>>> }
>>>>>>>>
>>>>>>>> My question relates to the findOffices method and its filtering
>>>>>>>>
>>>>>>> regionId
>>>>>>> parameter when the value is not a valid integer. For example,
>>>>>>> consider
>>>>>> the
>>>>>>>> request 'GET /rest/api/offices?region=AA'.
>>>>>>>>
>>>>>>>> At the second step of AbstractRestResource.handleMethodExecution,
>>>>>>>> extractMethodParameters is invoked, which in turn triggers the
>>>>>>>>
>>>>>>> conversion
>>>>>>> of all parameters through the static method toObject.
>>>>>>>> When the conversion goes wrong and ConversionException is thrown,
>>>>>>>>
>>>>>>> toObject
>>>>>>>
>>>>>>>> catches it, sets the response status to 400 and returns null!
>>>>>>>>
>>>>>>>> Now, when my findOffices is finally executed, I get a null regionId
>>>>>>>>
>>>>>>> but I
>>>>>>> don't know whether it was not valid or the parameter was not present
>>>>>>> at
>>>>>> all. Checking the response status downstream is also particularly
>>>>>>> hard
>>>>>> because I have no getStatus (Tomcat 6 here, ouch!).
>>>>>>>> To my mind, findOffices should return null instead of the unfiltered
>>>>>>>>
>>>>>>> list
>>>>>>> of offices if the conversion went wrong, even because the response
>>>>>>>> status is 400 (as set by toObject). However, how can I know it?
>>>>>>>>
>>>>>>>> Any suggestions?
>>>>>>>>
>>>>>>>> IMO this is a bug in the library.
>>>>>>> #findOffices() should not be executed at all.
>>>>>>> A response with status code 400 should be returned immediately after
>>>>>>>
>>>>>> the
>>>>>> unsuccessful convention without giving a chance to the application code
>>>>>> to
>>>>>>
>>>>>>> be executed.
>>>>>>>
>>>>>>> Many thanks,
>>>>>>>> Fabio
>>>>>>>>
>>>>>>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
>>> For additional commands, e-mail: users-help@wicket.apache.org
>>>
>>>


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org


Re: [wicketstuff-restannotations] AbstractRestResource.toObject makes it impossible for mapped methods to know a parameter conversion went wrong.

Posted by Fabio Fioretti <wi...@gmail.com>.
I confirm version 6.23.0 fixed the problem.

Thank you for the great support!

Kind regards,
Fabio

On Thu, Apr 28, 2016 at 12:02 PM, Fabio Fioretti <
windom.macrosorch@gmail.com> wrote:

> Thanks Andrea, that would be excellent!
>
> Keep up the great work,
> Fabio
>
> On Thu, Apr 28, 2016 at 11:52 AM, Andrea Del Bene <an...@gmail.com>
> wrote:
>
>> Thank you for the issue! I think we can make it for next release 6.23.0
>> which should come quite soon (at the moment we are voting to release Wicket
>> 6.23.0).
>>
>> Andrea.
>>
>>
>> On 28/04/2016 11:34, Fabio Fioretti wrote:
>>
>>> Done: https://github.com/wicketstuff/core/issues/490
>>>
>>> Many thanks,
>>> Fabio
>>>
>>> On Thu, Apr 28, 2016 at 11:03 AM, Martin Grigorov <
>>> martin.grigorov@gmail.com
>>>
>>>> wrote:
>>>> Please file an issue at Wicketstuff GibHub.
>>>> On Apr 28, 2016 10:31 AM, "Fabio Fioretti" <windom.macrosorch@gmail.com
>>>> >
>>>> wrote:
>>>>
>>>> Hi Martin,
>>>>>
>>>>> Thanks, I agree - findOffices() shouldn't be executed at all. In fact,
>>>>> handleMethodExecution() returns before invoking application code in all
>>>>> other cases (step 1 for unauthorized access, step 3 for validation
>>>>>
>>>> errors).
>>>>
>>>>> Any chance to have it fixed relatively soon? (maybe Andrea can answer
>>>>>
>>>> this)
>>>>
>>>>> Kind regards,
>>>>> Fabio
>>>>>
>>>>> On Thu, Apr 28, 2016 at 6:44 AM, Martin Grigorov <mgrigorov@apache.org
>>>>> >
>>>>> wrote:
>>>>>
>>>>> Hi,
>>>>>>
>>>>>>
>>>>>> On Wed, Apr 27, 2016 at 12:07 PM, Fabio Fioretti <
>>>>>> windom.macrosorch@gmail.com> wrote:
>>>>>>
>>>>>> Hi all,
>>>>>>>
>>>>>>> Please consider the following simple implementation of
>>>>>>>
>>>>>> AbstractRestResource
>>>>>>
>>>>>>> (6.22.0):
>>>>>>>
>>>>>>> @ResourcePath("/rest/api")
>>>>>>> public class MyRestResource extends
>>>>>>> AbstractRestResource<JsonWebSerialDeserial>
>>>>>>> {
>>>>>>>
>>>>>>>   public MyRestResource ()
>>>>>>>   {
>>>>>>>    super(new JsonWebSerialDeserial(new GsonObjectSerialDeserial()));
>>>>>>>   }
>>>>>>>
>>>>>>>   @MethodMapping(value = "/offices")
>>>>>>>   public List<Office> findOffices(
>>>>>>>     @RequestParam(value = "region", required = false) Integer
>>>>>>>
>>>>>> regionId)
>>>>
>>>>>   {
>>>>>>>    return findOfficesByRegion(regionId);
>>>>>>>   }
>>>>>>> }
>>>>>>>
>>>>>>> My question relates to the findOffices method and its filtering
>>>>>>>
>>>>>> regionId
>>>>>
>>>>>> parameter when the value is not a valid integer. For example,
>>>>>>>
>>>>>> consider
>>>>
>>>>> the
>>>>>>
>>>>>>> request 'GET /rest/api/offices?region=AA'.
>>>>>>>
>>>>>>> At the second step of AbstractRestResource.handleMethodExecution,
>>>>>>> extractMethodParameters is invoked, which in turn triggers the
>>>>>>>
>>>>>> conversion
>>>>>
>>>>>> of all parameters through the static method toObject.
>>>>>>>
>>>>>>> When the conversion goes wrong and ConversionException is thrown,
>>>>>>>
>>>>>> toObject
>>>>>>
>>>>>>> catches it, sets the response status to 400 and returns null!
>>>>>>>
>>>>>>> Now, when my findOffices is finally executed, I get a null regionId
>>>>>>>
>>>>>> but I
>>>>>
>>>>>> don't know whether it was not valid or the parameter was not present
>>>>>>>
>>>>>> at
>>>>
>>>>> all. Checking the response status downstream is also particularly
>>>>>>>
>>>>>> hard
>>>>
>>>>> because I have no getStatus (Tomcat 6 here, ouch!).
>>>>>>>
>>>>>>> To my mind, findOffices should return null instead of the unfiltered
>>>>>>>
>>>>>> list
>>>>>
>>>>>> of offices if the conversion went wrong, even because the response
>>>>>>> status is 400 (as set by toObject). However, how can I know it?
>>>>>>>
>>>>>>> Any suggestions?
>>>>>>>
>>>>>>> IMO this is a bug in the library.
>>>>>> #findOffices() should not be executed at all.
>>>>>> A response with status code 400 should be returned immediately after
>>>>>>
>>>>> the
>>>>
>>>>> unsuccessful convention without giving a chance to the application code
>>>>>>
>>>>> to
>>>>>
>>>>>> be executed.
>>>>>>
>>>>>> Many thanks,
>>>>>>> Fabio
>>>>>>>
>>>>>>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
>> For additional commands, e-mail: users-help@wicket.apache.org
>>
>>
>

Re: [wicketstuff-restannotations] AbstractRestResource.toObject makes it impossible for mapped methods to know a parameter conversion went wrong.

Posted by Fabio Fioretti <wi...@gmail.com>.
Thanks Andrea, that would be excellent!

Keep up the great work,
Fabio

On Thu, Apr 28, 2016 at 11:52 AM, Andrea Del Bene <an...@gmail.com>
wrote:

> Thank you for the issue! I think we can make it for next release 6.23.0
> which should come quite soon (at the moment we are voting to release Wicket
> 6.23.0).
>
> Andrea.
>
>
> On 28/04/2016 11:34, Fabio Fioretti wrote:
>
>> Done: https://github.com/wicketstuff/core/issues/490
>>
>> Many thanks,
>> Fabio
>>
>> On Thu, Apr 28, 2016 at 11:03 AM, Martin Grigorov <
>> martin.grigorov@gmail.com
>>
>>> wrote:
>>> Please file an issue at Wicketstuff GibHub.
>>> On Apr 28, 2016 10:31 AM, "Fabio Fioretti" <wi...@gmail.com>
>>> wrote:
>>>
>>> Hi Martin,
>>>>
>>>> Thanks, I agree - findOffices() shouldn't be executed at all. In fact,
>>>> handleMethodExecution() returns before invoking application code in all
>>>> other cases (step 1 for unauthorized access, step 3 for validation
>>>>
>>> errors).
>>>
>>>> Any chance to have it fixed relatively soon? (maybe Andrea can answer
>>>>
>>> this)
>>>
>>>> Kind regards,
>>>> Fabio
>>>>
>>>> On Thu, Apr 28, 2016 at 6:44 AM, Martin Grigorov <mg...@apache.org>
>>>> wrote:
>>>>
>>>> Hi,
>>>>>
>>>>>
>>>>> On Wed, Apr 27, 2016 at 12:07 PM, Fabio Fioretti <
>>>>> windom.macrosorch@gmail.com> wrote:
>>>>>
>>>>> Hi all,
>>>>>>
>>>>>> Please consider the following simple implementation of
>>>>>>
>>>>> AbstractRestResource
>>>>>
>>>>>> (6.22.0):
>>>>>>
>>>>>> @ResourcePath("/rest/api")
>>>>>> public class MyRestResource extends
>>>>>> AbstractRestResource<JsonWebSerialDeserial>
>>>>>> {
>>>>>>
>>>>>>   public MyRestResource ()
>>>>>>   {
>>>>>>    super(new JsonWebSerialDeserial(new GsonObjectSerialDeserial()));
>>>>>>   }
>>>>>>
>>>>>>   @MethodMapping(value = "/offices")
>>>>>>   public List<Office> findOffices(
>>>>>>     @RequestParam(value = "region", required = false) Integer
>>>>>>
>>>>> regionId)
>>>
>>>>   {
>>>>>>    return findOfficesByRegion(regionId);
>>>>>>   }
>>>>>> }
>>>>>>
>>>>>> My question relates to the findOffices method and its filtering
>>>>>>
>>>>> regionId
>>>>
>>>>> parameter when the value is not a valid integer. For example,
>>>>>>
>>>>> consider
>>>
>>>> the
>>>>>
>>>>>> request 'GET /rest/api/offices?region=AA'.
>>>>>>
>>>>>> At the second step of AbstractRestResource.handleMethodExecution,
>>>>>> extractMethodParameters is invoked, which in turn triggers the
>>>>>>
>>>>> conversion
>>>>
>>>>> of all parameters through the static method toObject.
>>>>>>
>>>>>> When the conversion goes wrong and ConversionException is thrown,
>>>>>>
>>>>> toObject
>>>>>
>>>>>> catches it, sets the response status to 400 and returns null!
>>>>>>
>>>>>> Now, when my findOffices is finally executed, I get a null regionId
>>>>>>
>>>>> but I
>>>>
>>>>> don't know whether it was not valid or the parameter was not present
>>>>>>
>>>>> at
>>>
>>>> all. Checking the response status downstream is also particularly
>>>>>>
>>>>> hard
>>>
>>>> because I have no getStatus (Tomcat 6 here, ouch!).
>>>>>>
>>>>>> To my mind, findOffices should return null instead of the unfiltered
>>>>>>
>>>>> list
>>>>
>>>>> of offices if the conversion went wrong, even because the response
>>>>>> status is 400 (as set by toObject). However, how can I know it?
>>>>>>
>>>>>> Any suggestions?
>>>>>>
>>>>>> IMO this is a bug in the library.
>>>>> #findOffices() should not be executed at all.
>>>>> A response with status code 400 should be returned immediately after
>>>>>
>>>> the
>>>
>>>> unsuccessful convention without giving a chance to the application code
>>>>>
>>>> to
>>>>
>>>>> be executed.
>>>>>
>>>>> Many thanks,
>>>>>> Fabio
>>>>>>
>>>>>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
>
>

Re: [wicketstuff-restannotations] AbstractRestResource.toObject makes it impossible for mapped methods to know a parameter conversion went wrong.

Posted by Andrea Del Bene <an...@gmail.com>.
Thank you for the issue! I think we can make it for next release 6.23.0 
which should come quite soon (at the moment we are voting to release 
Wicket 6.23.0).

Andrea.

On 28/04/2016 11:34, Fabio Fioretti wrote:
> Done: https://github.com/wicketstuff/core/issues/490
>
> Many thanks,
> Fabio
>
> On Thu, Apr 28, 2016 at 11:03 AM, Martin Grigorov <martin.grigorov@gmail.com
>> wrote:
>> Please file an issue at Wicketstuff GibHub.
>> On Apr 28, 2016 10:31 AM, "Fabio Fioretti" <wi...@gmail.com>
>> wrote:
>>
>>> Hi Martin,
>>>
>>> Thanks, I agree - findOffices() shouldn't be executed at all. In fact,
>>> handleMethodExecution() returns before invoking application code in all
>>> other cases (step 1 for unauthorized access, step 3 for validation
>> errors).
>>> Any chance to have it fixed relatively soon? (maybe Andrea can answer
>> this)
>>> Kind regards,
>>> Fabio
>>>
>>> On Thu, Apr 28, 2016 at 6:44 AM, Martin Grigorov <mg...@apache.org>
>>> wrote:
>>>
>>>> Hi,
>>>>
>>>>
>>>> On Wed, Apr 27, 2016 at 12:07 PM, Fabio Fioretti <
>>>> windom.macrosorch@gmail.com> wrote:
>>>>
>>>>> Hi all,
>>>>>
>>>>> Please consider the following simple implementation of
>>>> AbstractRestResource
>>>>> (6.22.0):
>>>>>
>>>>> @ResourcePath("/rest/api")
>>>>> public class MyRestResource extends
>>>>> AbstractRestResource<JsonWebSerialDeserial>
>>>>> {
>>>>>
>>>>>   public MyRestResource ()
>>>>>   {
>>>>>    super(new JsonWebSerialDeserial(new GsonObjectSerialDeserial()));
>>>>>   }
>>>>>
>>>>>   @MethodMapping(value = "/offices")
>>>>>   public List<Office> findOffices(
>>>>>     @RequestParam(value = "region", required = false) Integer
>> regionId)
>>>>>   {
>>>>>    return findOfficesByRegion(regionId);
>>>>>   }
>>>>> }
>>>>>
>>>>> My question relates to the findOffices method and its filtering
>>> regionId
>>>>> parameter when the value is not a valid integer. For example,
>> consider
>>>> the
>>>>> request 'GET /rest/api/offices?region=AA'.
>>>>>
>>>>> At the second step of AbstractRestResource.handleMethodExecution,
>>>>> extractMethodParameters is invoked, which in turn triggers the
>>> conversion
>>>>> of all parameters through the static method toObject.
>>>>>
>>>>> When the conversion goes wrong and ConversionException is thrown,
>>>> toObject
>>>>> catches it, sets the response status to 400 and returns null!
>>>>>
>>>>> Now, when my findOffices is finally executed, I get a null regionId
>>> but I
>>>>> don't know whether it was not valid or the parameter was not present
>> at
>>>>> all. Checking the response status downstream is also particularly
>> hard
>>>>> because I have no getStatus (Tomcat 6 here, ouch!).
>>>>>
>>>>> To my mind, findOffices should return null instead of the unfiltered
>>> list
>>>>> of offices if the conversion went wrong, even because the response
>>>>> status is 400 (as set by toObject). However, how can I know it?
>>>>>
>>>>> Any suggestions?
>>>>>
>>>> IMO this is a bug in the library.
>>>> #findOffices() should not be executed at all.
>>>> A response with status code 400 should be returned immediately after
>> the
>>>> unsuccessful convention without giving a chance to the application code
>>> to
>>>> be executed.
>>>>
>>>>> Many thanks,
>>>>> Fabio
>>>>>


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org


Re: [wicketstuff-restannotations] AbstractRestResource.toObject makes it impossible for mapped methods to know a parameter conversion went wrong.

Posted by Fabio Fioretti <wi...@gmail.com>.
Done: https://github.com/wicketstuff/core/issues/490

Many thanks,
Fabio

On Thu, Apr 28, 2016 at 11:03 AM, Martin Grigorov <martin.grigorov@gmail.com
> wrote:

> Please file an issue at Wicketstuff GibHub.
> On Apr 28, 2016 10:31 AM, "Fabio Fioretti" <wi...@gmail.com>
> wrote:
>
> > Hi Martin,
> >
> > Thanks, I agree - findOffices() shouldn't be executed at all. In fact,
> > handleMethodExecution() returns before invoking application code in all
> > other cases (step 1 for unauthorized access, step 3 for validation
> errors).
> >
> > Any chance to have it fixed relatively soon? (maybe Andrea can answer
> this)
> >
> > Kind regards,
> > Fabio
> >
> > On Thu, Apr 28, 2016 at 6:44 AM, Martin Grigorov <mg...@apache.org>
> > wrote:
> >
> > > Hi,
> > >
> > >
> > > On Wed, Apr 27, 2016 at 12:07 PM, Fabio Fioretti <
> > > windom.macrosorch@gmail.com> wrote:
> > >
> > > > Hi all,
> > > >
> > > > Please consider the following simple implementation of
> > > AbstractRestResource
> > > > (6.22.0):
> > > >
> > > > @ResourcePath("/rest/api")
> > > > public class MyRestResource extends
> > > > AbstractRestResource<JsonWebSerialDeserial>
> > > > {
> > > >
> > > >  public MyRestResource ()
> > > >  {
> > > >   super(new JsonWebSerialDeserial(new GsonObjectSerialDeserial()));
> > > >  }
> > > >
> > > >  @MethodMapping(value = "/offices")
> > > >  public List<Office> findOffices(
> > > >    @RequestParam(value = "region", required = false) Integer
> regionId)
> > > >  {
> > > >   return findOfficesByRegion(regionId);
> > > >  }
> > > > }
> > > >
> > > > My question relates to the findOffices method and its filtering
> > regionId
> > > > parameter when the value is not a valid integer. For example,
> consider
> > > the
> > > > request 'GET /rest/api/offices?region=AA'.
> > > >
> > > > At the second step of AbstractRestResource.handleMethodExecution,
> > > > extractMethodParameters is invoked, which in turn triggers the
> > conversion
> > > > of all parameters through the static method toObject.
> > > >
> > > > When the conversion goes wrong and ConversionException is thrown,
> > > toObject
> > > > catches it, sets the response status to 400 and returns null!
> > > >
> > > > Now, when my findOffices is finally executed, I get a null regionId
> > but I
> > > > don't know whether it was not valid or the parameter was not present
> at
> > > > all. Checking the response status downstream is also particularly
> hard
> > > > because I have no getStatus (Tomcat 6 here, ouch!).
> > > >
> > > > To my mind, findOffices should return null instead of the unfiltered
> > list
> > > > of offices if the conversion went wrong, even because the response
> > > > status is 400 (as set by toObject). However, how can I know it?
> > > >
> > > > Any suggestions?
> > > >
> > >
> > > IMO this is a bug in the library.
> > > #findOffices() should not be executed at all.
> > > A response with status code 400 should be returned immediately after
> the
> > > unsuccessful convention without giving a chance to the application code
> > to
> > > be executed.
> > >
> > > >
> > > > Many thanks,
> > > > Fabio
> > > >
> > >
> >
>

Re: [wicketstuff-restannotations] AbstractRestResource.toObject makes it impossible for mapped methods to know a parameter conversion went wrong.

Posted by Martin Grigorov <ma...@gmail.com>.
Please file an issue at Wicketstuff GibHub.
On Apr 28, 2016 10:31 AM, "Fabio Fioretti" <wi...@gmail.com>
wrote:

> Hi Martin,
>
> Thanks, I agree - findOffices() shouldn't be executed at all. In fact,
> handleMethodExecution() returns before invoking application code in all
> other cases (step 1 for unauthorized access, step 3 for validation errors).
>
> Any chance to have it fixed relatively soon? (maybe Andrea can answer this)
>
> Kind regards,
> Fabio
>
> On Thu, Apr 28, 2016 at 6:44 AM, Martin Grigorov <mg...@apache.org>
> wrote:
>
> > Hi,
> >
> >
> > On Wed, Apr 27, 2016 at 12:07 PM, Fabio Fioretti <
> > windom.macrosorch@gmail.com> wrote:
> >
> > > Hi all,
> > >
> > > Please consider the following simple implementation of
> > AbstractRestResource
> > > (6.22.0):
> > >
> > > @ResourcePath("/rest/api")
> > > public class MyRestResource extends
> > > AbstractRestResource<JsonWebSerialDeserial>
> > > {
> > >
> > >  public MyRestResource ()
> > >  {
> > >   super(new JsonWebSerialDeserial(new GsonObjectSerialDeserial()));
> > >  }
> > >
> > >  @MethodMapping(value = "/offices")
> > >  public List<Office> findOffices(
> > >    @RequestParam(value = "region", required = false) Integer regionId)
> > >  {
> > >   return findOfficesByRegion(regionId);
> > >  }
> > > }
> > >
> > > My question relates to the findOffices method and its filtering
> regionId
> > > parameter when the value is not a valid integer. For example, consider
> > the
> > > request 'GET /rest/api/offices?region=AA'.
> > >
> > > At the second step of AbstractRestResource.handleMethodExecution,
> > > extractMethodParameters is invoked, which in turn triggers the
> conversion
> > > of all parameters through the static method toObject.
> > >
> > > When the conversion goes wrong and ConversionException is thrown,
> > toObject
> > > catches it, sets the response status to 400 and returns null!
> > >
> > > Now, when my findOffices is finally executed, I get a null regionId
> but I
> > > don't know whether it was not valid or the parameter was not present at
> > > all. Checking the response status downstream is also particularly hard
> > > because I have no getStatus (Tomcat 6 here, ouch!).
> > >
> > > To my mind, findOffices should return null instead of the unfiltered
> list
> > > of offices if the conversion went wrong, even because the response
> > > status is 400 (as set by toObject). However, how can I know it?
> > >
> > > Any suggestions?
> > >
> >
> > IMO this is a bug in the library.
> > #findOffices() should not be executed at all.
> > A response with status code 400 should be returned immediately after the
> > unsuccessful convention without giving a chance to the application code
> to
> > be executed.
> >
> > >
> > > Many thanks,
> > > Fabio
> > >
> >
>

Re: [wicketstuff-restannotations] AbstractRestResource.toObject makes it impossible for mapped methods to know a parameter conversion went wrong.

Posted by Fabio Fioretti <wi...@gmail.com>.
Hi Martin,

Thanks, I agree - findOffices() shouldn't be executed at all. In fact,
handleMethodExecution() returns before invoking application code in all
other cases (step 1 for unauthorized access, step 3 for validation errors).

Any chance to have it fixed relatively soon? (maybe Andrea can answer this)

Kind regards,
Fabio

On Thu, Apr 28, 2016 at 6:44 AM, Martin Grigorov <mg...@apache.org>
wrote:

> Hi,
>
>
> On Wed, Apr 27, 2016 at 12:07 PM, Fabio Fioretti <
> windom.macrosorch@gmail.com> wrote:
>
> > Hi all,
> >
> > Please consider the following simple implementation of
> AbstractRestResource
> > (6.22.0):
> >
> > @ResourcePath("/rest/api")
> > public class MyRestResource extends
> > AbstractRestResource<JsonWebSerialDeserial>
> > {
> >
> >  public MyRestResource ()
> >  {
> >   super(new JsonWebSerialDeserial(new GsonObjectSerialDeserial()));
> >  }
> >
> >  @MethodMapping(value = "/offices")
> >  public List<Office> findOffices(
> >    @RequestParam(value = "region", required = false) Integer regionId)
> >  {
> >   return findOfficesByRegion(regionId);
> >  }
> > }
> >
> > My question relates to the findOffices method and its filtering regionId
> > parameter when the value is not a valid integer. For example, consider
> the
> > request 'GET /rest/api/offices?region=AA'.
> >
> > At the second step of AbstractRestResource.handleMethodExecution,
> > extractMethodParameters is invoked, which in turn triggers the conversion
> > of all parameters through the static method toObject.
> >
> > When the conversion goes wrong and ConversionException is thrown,
> toObject
> > catches it, sets the response status to 400 and returns null!
> >
> > Now, when my findOffices is finally executed, I get a null regionId but I
> > don't know whether it was not valid or the parameter was not present at
> > all. Checking the response status downstream is also particularly hard
> > because I have no getStatus (Tomcat 6 here, ouch!).
> >
> > To my mind, findOffices should return null instead of the unfiltered list
> > of offices if the conversion went wrong, even because the response
> > status is 400 (as set by toObject). However, how can I know it?
> >
> > Any suggestions?
> >
>
> IMO this is a bug in the library.
> #findOffices() should not be executed at all.
> A response with status code 400 should be returned immediately after the
> unsuccessful convention without giving a chance to the application code to
> be executed.
>
> >
> > Many thanks,
> > Fabio
> >
>

Re: [wicketstuff-restannotations] AbstractRestResource.toObject makes it impossible for mapped methods to know a parameter conversion went wrong.

Posted by Martin Grigorov <mg...@apache.org>.
Hi,


On Wed, Apr 27, 2016 at 12:07 PM, Fabio Fioretti <
windom.macrosorch@gmail.com> wrote:

> Hi all,
>
> Please consider the following simple implementation of AbstractRestResource
> (6.22.0):
>
> @ResourcePath("/rest/api")
> public class MyRestResource extends
> AbstractRestResource<JsonWebSerialDeserial>
> {
>
>  public MyRestResource ()
>  {
>   super(new JsonWebSerialDeserial(new GsonObjectSerialDeserial()));
>  }
>
>  @MethodMapping(value = "/offices")
>  public List<Office> findOffices(
>    @RequestParam(value = "region", required = false) Integer regionId)
>  {
>   return findOfficesByRegion(regionId);
>  }
> }
>
> My question relates to the findOffices method and its filtering regionId
> parameter when the value is not a valid integer. For example, consider the
> request 'GET /rest/api/offices?region=AA'.
>
> At the second step of AbstractRestResource.handleMethodExecution,
> extractMethodParameters is invoked, which in turn triggers the conversion
> of all parameters through the static method toObject.
>
> When the conversion goes wrong and ConversionException is thrown, toObject
> catches it, sets the response status to 400 and returns null!
>
> Now, when my findOffices is finally executed, I get a null regionId but I
> don't know whether it was not valid or the parameter was not present at
> all. Checking the response status downstream is also particularly hard
> because I have no getStatus (Tomcat 6 here, ouch!).
>
> To my mind, findOffices should return null instead of the unfiltered list
> of offices if the conversion went wrong, even because the response
> status is 400 (as set by toObject). However, how can I know it?
>
> Any suggestions?
>

IMO this is a bug in the library.
#findOffices() should not be executed at all.
A response with status code 400 should be returned immediately after the
unsuccessful convention without giving a chance to the application code to
be executed.

>
> Many thanks,
> Fabio
>