[
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