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

Christian Schneider commented on SYNCOPE-246:
---------------------------------------------

The problem is that the setter is called with exactly the same object as the 
internal list.

So currently it looks like this:
    public void setOrders(List<Order> orders) {
            this.orders.clear();
            this.orders.addAll(orders);
    }
If this is called with the internal list object then the result is an empty 
list.

I found that we simply need to check if the incoming object is that same as the 
internal list and then skip the changes.

    public void setOrders(List<Order> orders) {
        if (this.orders != orders) {
            this.orders.clear();
            this.orders.addAll(orders);
        }
    }

So for version 1.1.0 I will change the setters like above. (Will create and 
link a new issue for this).

As soon as we completed the switch to cxf and remove the spring services we 
still should remove the setters. So I will move this issue to 1.2.0


                
> Remove collection setters in transfer objects for JAXB marshalling
> ------------------------------------------------------------------
>
>                 Key: SYNCOPE-246
>                 URL: https://issues.apache.org/jira/browse/SYNCOPE-246
>             Project: Syncope
>          Issue Type: Sub-task
>          Components: core
>    Affects Versions: 1.1.0
>         Environment: CXF branch
>            Reporter: Andrei Shakirin
>            Assignee: Christian Schneider
>             Fix For: 1.1.0
>
>
> XML payload will be marshaled/unmarshaled using JAXB by migration to CXF Rest 
> frontend.
> JAXB works with collections in a little bit different way as Spring Rest 
> marshaling.
> JAXB uses only getter for the list (assumes that list is initialized due 
> object creation) and adds elements into the list obtained by getter by 
> unmarshaling. It doesn't need setter at all.
> The problem is that actual implementation of transfer objects doesn't work 
> with JAXB. 
> If TO provide setter for collection, JAXB gets the list, adds the elements 
> and additionally calls setter for this list. As far as setter logic cleans 
> the TO collection, the result collection is always empty.
> Solution is remove setters for collections in TOs by migration on CXF Rest.
> I find it also better from security and encapsulation aspects.
> Regards,
> Andrei.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to