You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by il...@apache.org on 2016/07/05 09:41:23 UTC

[6/6] syncope git commit: All tests are green

All tests are green


Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/bbe8fe08
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/bbe8fe08
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/bbe8fe08

Branch: refs/heads/2_0_NO_JAXB
Commit: bbe8fe089cc2d40cb13e1157600f3ae3782ca9a1
Parents: 0fad00a
Author: Francesco Chicchiricc� <il...@apache.org>
Authored: Tue Jul 5 11:40:39 2016 +0200
Committer: Francesco Chicchiricc� <il...@apache.org>
Committed: Tue Jul 5 11:40:39 2016 +0200

----------------------------------------------------------------------
 .../commands/user/UserSyncopeOperations.java    |  2 +-
 .../client/console/rest/ReportRestClient.java   |  4 +-
 .../client/console/rest/UserRestClient.java     | 11 ++---
 .../data/table/BulkActionResultColumn.java      |  9 ++--
 .../syncope/common/lib/SyncopeConstants.java    |  4 --
 .../syncope/common/lib/to/BulkActionResult.java | 48 ++++++++++++++++----
 .../common/lib/to/WorkflowFormPropertyTO.java   |  4 --
 .../apache/syncope/common/lib/AbstractTest.java | 15 ++++++
 .../apache/syncope/core/logic/ReportLogic.java  |  4 +-
 .../apache/syncope/core/logic/TaskLogic.java    |  4 +-
 .../rest/cxf/service/AbstractAnyService.java    | 24 +++++-----
 .../rest/cxf/service/ConnectorServiceImpl.java  |  4 +-
 .../rest/cxf/service/ResourceServiceImpl.java   |  8 ++--
 .../core/rest/cxf/service/TaskServiceImpl.java  | 12 ++---
 .../src/main/resources/restCXFContext.xml       |  1 -
 .../src/main/resources/jboss/restCXFContext.xml | 41 ++++-------------
 .../apache/syncope/fit/core/ReportITCase.java   |  4 +-
 .../org/apache/syncope/fit/core/UserITCase.java | 29 ++++++++----
 18 files changed, 126 insertions(+), 102 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/bbe8fe08/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserSyncopeOperations.java
----------------------------------------------------------------------
diff --git a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserSyncopeOperations.java b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserSyncopeOperations.java
index cc9101b..f1c2aad 100644
--- a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserSyncopeOperations.java
+++ b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserSyncopeOperations.java
@@ -89,6 +89,6 @@ public class UserSyncopeOperations {
             bulkAction.getTargets().add(String.valueOf(user.getKey()));
         }
         final BulkActionResult bulkResult = userService.bulk(bulkAction).readEntity(BulkActionResult.class);
-        return bulkResult.getResults();
+        return bulkResult.getResultMap();
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/bbe8fe08/client/console/src/main/java/org/apache/syncope/client/console/rest/ReportRestClient.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/ReportRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/ReportRestClient.java
index c51df2c..b0a58ec 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/rest/ReportRestClient.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/ReportRestClient.java
@@ -144,13 +144,13 @@ public class ReportRestClient extends BaseRestClient
             case DELETE:
                 for (String target : action.getTargets()) {
                     delete(target);
-                    result.getResults().put(target, BulkActionResult.Status.SUCCESS);
+                    result.add(target, BulkActionResult.Status.SUCCESS);
                 }
                 break;
             case EXECUTE:
                 for (String target : action.getTargets()) {
                     startExecution(target, new Date());
-                    result.getResults().put(target, BulkActionResult.Status.SUCCESS);
+                    result.add(target, BulkActionResult.Status.SUCCESS);
                 }
                 break;
             default:

http://git-wip-us.apache.org/repos/asf/syncope/blob/bbe8fe08/client/console/src/main/java/org/apache/syncope/client/console/rest/UserRestClient.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/UserRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/UserRestClient.java
index 68e3a01..835a278 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/rest/UserRestClient.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/UserRestClient.java
@@ -19,7 +19,6 @@
 package org.apache.syncope.client.console.rest;
 
 import java.util.List;
-import java.util.Map;
 import javax.ws.rs.core.GenericType;
 import javax.ws.rs.core.Response;
 import org.apache.commons.lang3.StringUtils;
@@ -89,7 +88,6 @@ public class UserRestClient extends AbstractAnyRestClient<UserTO, UserPatch> {
         BulkActionResult result;
         synchronized (this) {
             result = new BulkActionResult();
-            Map<String, BulkActionResult.Status> res = result.getResults();
             UserService service = getService(etag, UserService.class);
 
             @SuppressWarnings("unchecked")
@@ -97,14 +95,14 @@ public class UserRestClient extends AbstractAnyRestClient<UserTO, UserPatch> {
                     readEntity(ProvisioningResult.class);
 
             if (statusPatch.isOnSyncope()) {
-                res.put(StringUtils.capitalize(Constants.SYNCOPE),
+                result.add(StringUtils.capitalize(Constants.SYNCOPE),
                         "suspended".equalsIgnoreCase(provisions.getEntity().getStatus())
                         ? BulkActionResult.Status.SUCCESS
                         : BulkActionResult.Status.FAILURE);
             }
 
             for (PropagationStatus status : provisions.getPropagationStatuses()) {
-                res.put(status.getResource(), BulkActionResult.Status.valueOf(status.getStatus().name()));
+                result.add(status.getResource(), BulkActionResult.Status.valueOf(status.getStatus().name()));
             }
             resetClient(UserService.class);
         }
@@ -119,7 +117,6 @@ public class UserRestClient extends AbstractAnyRestClient<UserTO, UserPatch> {
         BulkActionResult result;
         synchronized (this) {
             result = new BulkActionResult();
-            Map<String, BulkActionResult.Status> res = result.getResults();
             UserService service = getService(etag, UserService.class);
 
             @SuppressWarnings("unchecked")
@@ -127,14 +124,14 @@ public class UserRestClient extends AbstractAnyRestClient<UserTO, UserPatch> {
                     readEntity(ProvisioningResult.class);
 
             if (statusPatch.isOnSyncope()) {
-                res.put(StringUtils.capitalize(Constants.SYNCOPE),
+                result.add(StringUtils.capitalize(Constants.SYNCOPE),
                         "active".equalsIgnoreCase(provisions.getEntity().getStatus())
                         ? BulkActionResult.Status.SUCCESS
                         : BulkActionResult.Status.FAILURE);
             }
 
             for (PropagationStatus status : provisions.getPropagationStatuses()) {
-                res.put(status.getResource(), BulkActionResult.Status.valueOf(status.getStatus().name()));
+                result.add(status.getResource(), BulkActionResult.Status.valueOf(status.getStatus().name()));
             }
             resetClient(UserService.class);
         }

http://git-wip-us.apache.org/repos/asf/syncope/blob/bbe8fe08/client/console/src/main/java/org/apache/syncope/client/console/wicket/extensions/markup/html/repeater/data/table/BulkActionResultColumn.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wicket/extensions/markup/html/repeater/data/table/BulkActionResultColumn.java b/client/console/src/main/java/org/apache/syncope/client/console/wicket/extensions/markup/html/repeater/data/table/BulkActionResultColumn.java
index 73abd09..0587cdf 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wicket/extensions/markup/html/repeater/data/table/BulkActionResultColumn.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wicket/extensions/markup/html/repeater/data/table/BulkActionResultColumn.java
@@ -19,6 +19,7 @@
 package org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table;
 
 import java.lang.reflect.InvocationTargetException;
+import java.util.Map;
 import org.apache.syncope.common.lib.to.BulkActionResult;
 import org.apache.syncope.common.lib.to.BulkActionResult.Status;
 import org.apache.wicket.Component;
@@ -65,14 +66,14 @@ public class BulkActionResultColumn<T, S> extends AbstractColumn<T, S> {
     @Override
     public void populateItem(final Item<ICellPopulator<T>> item, final String componentId, final IModel<T> rowModel) {
         try {
-            final Object id = BeanUtils.getPropertyDescriptor(rowModel.getObject().getClass(), keyFieldName).
+            Object id = BeanUtils.getPropertyDescriptor(rowModel.getObject().getClass(), keyFieldName).
                     getReadMethod().invoke(rowModel.getObject(), new Object[0]);
-            final Status status = results.getResults().containsKey(id.toString())
-                    ? results.getResults().get(id.toString())
+            Map<String, Status> bulkResultMap = results.getResultMap();
+            Status status = bulkResultMap.containsKey(id.toString())
+                    ? bulkResultMap.get(id.toString())
                     : Status.NOT_ATTEMPTED;
 
             item.add(new Label(componentId, new StringResourceModel(status.name(), item, new Model<>(status.name()))));
-
         } catch (BeansException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
             LOG.error("Errore retrieving target id value", e);
         }

http://git-wip-us.apache.org/repos/asf/syncope/blob/bbe8fe08/common/lib/src/main/java/org/apache/syncope/common/lib/SyncopeConstants.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/SyncopeConstants.java b/common/lib/src/main/java/org/apache/syncope/common/lib/SyncopeConstants.java
index 543cfad..5bc7b49 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/SyncopeConstants.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/SyncopeConstants.java
@@ -25,10 +25,6 @@ import java.util.regex.Pattern;
 
 public final class SyncopeConstants {
 
-    public static final String NAMESPACE_PREFIX = "syncope";
-
-    public static final String NAMESPACE = "http://syncope.apache.org/2.0";
-
     public static final String MASTER_DOMAIN = "Master";
 
     public static final String ROOT_REALM = "/";

http://git-wip-us.apache.org/repos/asf/syncope/blob/bbe8fe08/common/lib/src/main/java/org/apache/syncope/common/lib/to/BulkActionResult.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/BulkActionResult.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/BulkActionResult.java
index dd0afff..c74f3af 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/BulkActionResult.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/BulkActionResult.java
@@ -18,7 +18,9 @@
  */
 package org.apache.syncope.common.lib.to;
 
+import com.fasterxml.jackson.annotation.JsonCreator;
 import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonProperty;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
@@ -41,22 +43,48 @@ public class BulkActionResult extends AbstractBaseBean {
 
     }
 
-    private final Map<String, Status> results = new HashMap<>();
+    public static class Single extends AbstractBaseBean {
 
-    public Map<String, Status> getResults() {
-        return results;
+        private static final long serialVersionUID = -2677679977955844506L;
+
+        private final String key;
+
+        private final Status status;
+
+        @JsonCreator
+        public Single(@JsonProperty("key") final String key, @JsonProperty("status") final Status status) {
+            this.key = key;
+            this.status = status;
+        }
+
+        public String getKey() {
+            return key;
+        }
+
+        public Status getStatus() {
+            return status;
+        }
     }
 
+    private final List<Single> results = new ArrayList<>();
+
     @JsonIgnore
-    public List<String> getResultByStatus(final Status status) {
-        final List<String> result = new ArrayList<>();
+    public boolean add(final String key, final Status status) {
+        Single single = new Single(key, status);
+        return results.contains(single) || results.add(single);
+    }
 
-        for (Map.Entry<String, Status> entry : results.entrySet()) {
-            if (entry.getValue() == status) {
-                result.add(entry.getKey());
-            }
+    public List<Single> getResults() {
+        return results;
+    }
+
+    @JsonIgnore
+    public Map<String, Status> getResultMap() {
+        Map<String, Status> result = new HashMap<>(results.size());
+        for (Single single : results) {
+            result.put(single.getKey(), single.getStatus());
         }
 
-        return Collections.unmodifiableList(result);
+        return Collections.unmodifiableMap(result);
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/bbe8fe08/common/lib/src/main/java/org/apache/syncope/common/lib/to/WorkflowFormPropertyTO.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/WorkflowFormPropertyTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/WorkflowFormPropertyTO.java
index 8551040..22e3ecc 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/WorkflowFormPropertyTO.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/WorkflowFormPropertyTO.java
@@ -18,8 +18,6 @@
  */
 package org.apache.syncope.common.lib.to;
 
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.fasterxml.jackson.annotation.JsonProperty;
 import java.util.HashMap;
 import java.util.Map;
 import org.apache.syncope.common.lib.AbstractBaseBean;
@@ -45,7 +43,6 @@ public class WorkflowFormPropertyTO extends AbstractBaseBean {
 
     private String datePattern;
 
-    @JsonIgnore
     private final Map<String, String> enumValues = new HashMap<>();
 
     public String getId() {
@@ -112,7 +109,6 @@ public class WorkflowFormPropertyTO extends AbstractBaseBean {
         this.datePattern = datePattern;
     }
 
-    @JsonProperty
     public Map<String, String> getEnumValues() {
         return enumValues;
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/bbe8fe08/common/lib/src/test/java/org/apache/syncope/common/lib/AbstractTest.java
----------------------------------------------------------------------
diff --git a/common/lib/src/test/java/org/apache/syncope/common/lib/AbstractTest.java b/common/lib/src/test/java/org/apache/syncope/common/lib/AbstractTest.java
index 1f6d94f..ab017c6 100644
--- a/common/lib/src/test/java/org/apache/syncope/common/lib/AbstractTest.java
+++ b/common/lib/src/test/java/org/apache/syncope/common/lib/AbstractTest.java
@@ -32,6 +32,7 @@ import org.apache.syncope.common.lib.patch.StringReplacePatchItem;
 import org.apache.syncope.common.lib.patch.UserPatch;
 import org.apache.syncope.common.lib.report.UserReportletConf;
 import org.apache.syncope.common.lib.to.AttrTO;
+import org.apache.syncope.common.lib.to.BulkActionResult;
 import org.apache.syncope.common.lib.to.ConnObjectTO;
 import org.apache.syncope.common.lib.to.GroupTO;
 import org.apache.syncope.common.lib.to.PropagationStatus;
@@ -46,6 +47,20 @@ public abstract class AbstractTest {
     protected abstract ObjectMapper getObjectMapper();
 
     protected void map() throws IOException {
+        BulkActionResult result = new BulkActionResult();
+        result.add("1", BulkActionResult.Status.SUCCESS);
+        result.add("2", BulkActionResult.Status.SUCCESS);
+
+        ObjectMapper mapper = getObjectMapper();
+
+        StringWriter writer = new StringWriter();
+        mapper.writerWithDefaultPrettyPrinter().writeValue(writer, result);
+
+        BulkActionResult actual = mapper.readValue(writer.toString(), BulkActionResult.class);
+        assertEquals(result, actual);
+    }
+
+    protected void nativeMap() throws IOException {
         WorkflowFormPropertyTO prop = new WorkflowFormPropertyTO();
         prop.getEnumValues().put("key1", "value1");
         prop.getEnumValues().put("key2", "value2");

http://git-wip-us.apache.org/repos/asf/syncope/blob/bbe8fe08/core/logic/src/main/java/org/apache/syncope/core/logic/ReportLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/ReportLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/ReportLogic.java
index 3fd8ccf..513ebe1 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/ReportLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/ReportLogic.java
@@ -366,10 +366,10 @@ public class ReportLogic extends AbstractExecutableLogic<ReportTO> {
         for (ReportExec exec : reportExecDAO.findAll(report, startedBefore, startedAfter, endedBefore, endedAfter)) {
             try {
                 reportExecDAO.delete(exec);
-                result.getResults().put(String.valueOf(exec.getKey()), BulkActionResult.Status.SUCCESS);
+                result.add(exec.getKey(), BulkActionResult.Status.SUCCESS);
             } catch (Exception e) {
                 LOG.error("Error deleting execution {} of report {}", exec.getKey(), key, e);
-                result.getResults().put(String.valueOf(exec.getKey()), BulkActionResult.Status.FAILURE);
+                result.add(exec.getKey(), BulkActionResult.Status.FAILURE);
             }
         }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/bbe8fe08/core/logic/src/main/java/org/apache/syncope/core/logic/TaskLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/TaskLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/TaskLogic.java
index 8136e46..3f9fa53 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/TaskLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/TaskLogic.java
@@ -343,10 +343,10 @@ public class TaskLogic extends AbstractExecutableLogic<AbstractTaskTO> {
         for (TaskExec exec : taskExecDAO.findAll(task, startedBefore, startedAfter, endedBefore, endedAfter)) {
             try {
                 taskExecDAO.delete(exec);
-                result.getResults().put(String.valueOf(exec.getKey()), BulkActionResult.Status.SUCCESS);
+                result.add(exec.getKey(), BulkActionResult.Status.SUCCESS);
             } catch (Exception e) {
                 LOG.error("Error deleting execution {} of task {}", exec.getKey(), key, e);
-                result.getResults().put(String.valueOf(exec.getKey()), BulkActionResult.Status.FAILURE);
+                result.add(exec.getKey(), BulkActionResult.Status.FAILURE);
             }
         }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/bbe8fe08/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/AbstractAnyService.java
----------------------------------------------------------------------
diff --git a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/AbstractAnyService.java b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/AbstractAnyService.java
index 7a19af1..020cf57 100644
--- a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/AbstractAnyService.java
+++ b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/AbstractAnyService.java
@@ -247,14 +247,14 @@ public abstract class AbstractAnyService<TO extends AnyTO, P extends AnyPatch>
 
         if (patch.getAction() == ResourceDeassociationAction.UNLINK) {
             for (String resource : patch.getResources()) {
-                result.getResults().put(resource,
+                result.add(resource,
                         updated.getEntity().getResources().contains(resource)
                         ? BulkActionResult.Status.FAILURE
                         : BulkActionResult.Status.SUCCESS);
             }
         } else {
             for (PropagationStatus propagationStatusTO : updated.getPropagationStatuses()) {
-                result.getResults().put(propagationStatusTO.getResource(),
+                result.add(propagationStatusTO.getResource(),
                         BulkActionResult.Status.valueOf(propagationStatusTO.getStatus().toString()));
             }
         }
@@ -304,14 +304,14 @@ public abstract class AbstractAnyService<TO extends AnyTO, P extends AnyPatch>
 
         if (patch.getAction() == ResourceAssociationAction.LINK) {
             for (String resource : patch.getResources()) {
-                result.getResults().put(resource,
+                result.add(resource,
                         updated.getEntity().getResources().contains(resource)
                         ? BulkActionResult.Status.SUCCESS
                         : BulkActionResult.Status.FAILURE);
             }
         } else {
             for (PropagationStatus propagationStatusTO : updated.getPropagationStatuses()) {
-                result.getResults().put(propagationStatusTO.getResource(),
+                result.add(propagationStatusTO.getResource(),
                         BulkActionResult.Status.valueOf(propagationStatusTO.getStatus().toString()));
             }
         }
@@ -334,12 +334,12 @@ public abstract class AbstractAnyService<TO extends AnyTO, P extends AnyPatch>
                             userPatch.setKey(key);
                             userPatch.setMustChangePassword(new BooleanReplacePatchItem.Builder().value(true).build());
 
-                            result.getResults().put(
+                            result.add(
                                     ((UserLogic) logic).update(userPatch, false).getEntity().getKey(),
                                     BulkActionResult.Status.SUCCESS);
                         } catch (Exception e) {
                             LOG.error("Error performing delete for user {}", key, e);
-                            result.getResults().put(key, BulkActionResult.Status.FAILURE);
+                            result.add(key, BulkActionResult.Status.FAILURE);
                         }
                     }
                 } else {
@@ -350,12 +350,12 @@ public abstract class AbstractAnyService<TO extends AnyTO, P extends AnyPatch>
             case DELETE:
                 for (String key : bulkAction.getTargets()) {
                     try {
-                        result.getResults().put(
+                        result.add(
                                 logic.delete(key, isNullPriorityAsync()).getEntity().getKey(),
                                 BulkActionResult.Status.SUCCESS);
                     } catch (Exception e) {
                         LOG.error("Error performing delete for user {}", key, e);
-                        result.getResults().put(key, BulkActionResult.Status.FAILURE);
+                        result.add(key, BulkActionResult.Status.FAILURE);
                     }
                 }
                 break;
@@ -369,13 +369,13 @@ public abstract class AbstractAnyService<TO extends AnyTO, P extends AnyPatch>
                         statusPatch.setOnSyncope(true);
 
                         try {
-                            result.getResults().put(
+                            result.add(
                                     ((UserLogic) logic).
                                     status(statusPatch, isNullPriorityAsync()).getEntity().getKey(),
                                     BulkActionResult.Status.SUCCESS);
                         } catch (Exception e) {
                             LOG.error("Error performing suspend for user {}", key, e);
-                            result.getResults().put(key, BulkActionResult.Status.FAILURE);
+                            result.add(key, BulkActionResult.Status.FAILURE);
                         }
                     }
                 } else {
@@ -392,13 +392,13 @@ public abstract class AbstractAnyService<TO extends AnyTO, P extends AnyPatch>
                         statusPatch.setOnSyncope(true);
 
                         try {
-                            result.getResults().put(
+                            result.add(
                                     ((UserLogic) logic).
                                     status(statusPatch, isNullPriorityAsync()).getEntity().getKey(),
                                     BulkActionResult.Status.SUCCESS);
                         } catch (Exception e) {
                             LOG.error("Error performing reactivate for user {}", key, e);
-                            result.getResults().put(key, BulkActionResult.Status.FAILURE);
+                            result.add(key, BulkActionResult.Status.FAILURE);
                         }
                     }
                 } else {

http://git-wip-us.apache.org/repos/asf/syncope/blob/bbe8fe08/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/ConnectorServiceImpl.java
----------------------------------------------------------------------
diff --git a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/ConnectorServiceImpl.java b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/ConnectorServiceImpl.java
index a5ebee1..5fc1902 100644
--- a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/ConnectorServiceImpl.java
+++ b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/ConnectorServiceImpl.java
@@ -101,10 +101,10 @@ public class ConnectorServiceImpl extends AbstractServiceImpl implements Connect
         if (bulkAction.getType() == BulkAction.Type.DELETE) {
             for (String key : bulkAction.getTargets()) {
                 try {
-                    result.getResults().put(logic.delete(key).getKey(), BulkActionResult.Status.SUCCESS);
+                    result.add(logic.delete(key).getKey(), BulkActionResult.Status.SUCCESS);
                 } catch (Exception e) {
                     LOG.error("Error performing delete for connector {}", key, e);
-                    result.getResults().put(key, BulkActionResult.Status.FAILURE);
+                    result.add(key, BulkActionResult.Status.FAILURE);
                 }
             }
         }

http://git-wip-us.apache.org/repos/asf/syncope/blob/bbe8fe08/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/ResourceServiceImpl.java
----------------------------------------------------------------------
diff --git a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/ResourceServiceImpl.java b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/ResourceServiceImpl.java
index 2bfba5a..9b32caa 100644
--- a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/ResourceServiceImpl.java
+++ b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/ResourceServiceImpl.java
@@ -172,10 +172,10 @@ public class ResourceServiceImpl extends AbstractServiceImpl implements Resource
                     default:
                 }
 
-                result.getResults().put(anyKey, BulkActionResult.Status.SUCCESS);
+                result.add(anyKey, BulkActionResult.Status.SUCCESS);
             } catch (Exception e) {
                 LOG.warn("While executing {} on {} {}", patch.getAction(), patch.getAnyTypeKey(), anyKey, e);
-                result.getResults().put(anyKey, BulkActionResult.Status.FAILURE);
+                result.add(anyKey, BulkActionResult.Status.FAILURE);
             }
         }
 
@@ -189,10 +189,10 @@ public class ResourceServiceImpl extends AbstractServiceImpl implements Resource
         if (bulkAction.getType() == BulkAction.Type.DELETE) {
             for (String key : bulkAction.getTargets()) {
                 try {
-                    result.getResults().put(logic.delete(key).getKey(), BulkActionResult.Status.SUCCESS);
+                    result.add(logic.delete(key).getKey(), BulkActionResult.Status.SUCCESS);
                 } catch (Exception e) {
                     LOG.error("Error performing delete for resource {}", key, e);
-                    result.getResults().put(key, BulkActionResult.Status.FAILURE);
+                    result.add(key, BulkActionResult.Status.FAILURE);
                 }
             }
         }

http://git-wip-us.apache.org/repos/asf/syncope/blob/bbe8fe08/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/TaskServiceImpl.java
----------------------------------------------------------------------
diff --git a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/TaskServiceImpl.java b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/TaskServiceImpl.java
index 16ba72a..f4eb4e0 100644
--- a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/TaskServiceImpl.java
+++ b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/TaskServiceImpl.java
@@ -113,10 +113,10 @@ public class TaskServiceImpl extends AbstractExecutableService implements TaskSe
             case DELETE:
                 for (String key : bulkAction.getTargets()) {
                     try {
-                        result.getResults().put(logic.delete(key).getKey(), BulkActionResult.Status.SUCCESS);
+                        result.add(logic.delete(key).getKey(), BulkActionResult.Status.SUCCESS);
                     } catch (Exception e) {
                         LOG.error("Error performing delete for task {}", key, e);
-                        result.getResults().put(key, BulkActionResult.Status.FAILURE);
+                        result.add(key, BulkActionResult.Status.FAILURE);
                     }
                 }
                 break;
@@ -125,10 +125,10 @@ public class TaskServiceImpl extends AbstractExecutableService implements TaskSe
                 for (String key : bulkAction.getTargets()) {
                     try {
                         logic.execute(key, null, true);
-                        result.getResults().put(key, BulkActionResult.Status.SUCCESS);
+                        result.add(key, BulkActionResult.Status.SUCCESS);
                     } catch (Exception e) {
                         LOG.error("Error performing dryrun for task {}", key, e);
-                        result.getResults().put(key, BulkActionResult.Status.FAILURE);
+                        result.add(key, BulkActionResult.Status.FAILURE);
                     }
                 }
                 break;
@@ -137,10 +137,10 @@ public class TaskServiceImpl extends AbstractExecutableService implements TaskSe
                 for (String key : bulkAction.getTargets()) {
                     try {
                         logic.execute(key, null, false);
-                        result.getResults().put(key, BulkActionResult.Status.SUCCESS);
+                        result.add(key, BulkActionResult.Status.SUCCESS);
                     } catch (Exception e) {
                         LOG.error("Error performing execute for task {}", key, e);
-                        result.getResults().put(key, BulkActionResult.Status.FAILURE);
+                        result.add(key, BulkActionResult.Status.FAILURE);
                     }
                 }
                 break;

http://git-wip-us.apache.org/repos/asf/syncope/blob/bbe8fe08/core/rest-cxf/src/main/resources/restCXFContext.xml
----------------------------------------------------------------------
diff --git a/core/rest-cxf/src/main/resources/restCXFContext.xml b/core/rest-cxf/src/main/resources/restCXFContext.xml
index b469dcf..df3716d 100644
--- a/core/rest-cxf/src/main/resources/restCXFContext.xml
+++ b/core/rest-cxf/src/main/resources/restCXFContext.xml
@@ -71,7 +71,6 @@ under the License.
   
   <bean id="wadlGenerator" class="org.apache.syncope.core.rest.cxf.WadlGenerator">
     <property name="applicationTitle" value="Apache Syncope ${syncope.version}"/>
-    <property name="namespacePrefix" value="syncope"/>
     <property name="linkAnyMediaTypeToXmlSchema" value="true"/>
     <property name="useJaxbContextForQnames" value="false"/>
     <property name="addResourceAndMethodIds" value="true"/>

http://git-wip-us.apache.org/repos/asf/syncope/blob/bbe8fe08/fit/core-reference/src/main/resources/jboss/restCXFContext.xml
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/main/resources/jboss/restCXFContext.xml b/fit/core-reference/src/main/resources/jboss/restCXFContext.xml
index 2417c35..53483cb 100644
--- a/fit/core-reference/src/main/resources/jboss/restCXFContext.xml
+++ b/fit/core-reference/src/main/resources/jboss/restCXFContext.xml
@@ -36,35 +36,15 @@ under the License.
 
   <context:component-scan base-package="org.apache.syncope.core.rest.cxf.service"/>  
 
-  <bean id="jaxbProvider" class="org.apache.cxf.jaxrs.provider.JAXBElementProvider">
-    <property name="namespacePrefixes">
-      <map>
-        <entry key="http://syncope.apache.org/2.0">
-          <value>syncope</value>
-        </entry>
-      </map>      
-    </property>
-    <property name="depthProperties">
-      <bean id="depthProperties" class="org.apache.cxf.staxutils.DocumentDepthProperties">
-        <property name="innerElementCountThreshold" value="500"/>
-      </bean>
-    </property>
-    <property name="collectionWrapperMap">
-      <map>
-        <entry>
-          <key>
-            <value>org.apache.syncope.common.lib.policy.AbstractPolicyTO</value>
-          </key>
-          <value>policies</value>
-        </entry>
-      </map>
-    </property>
-  </bean>
-
   <bean id="dateParamConverterProvider" class="org.apache.syncope.common.rest.api.DateParamConverterProvider"/>
 
-  <bean id="jacksonObjectMapper" class="org.apache.syncope.core.rest.cxf.UnwrappedObjectMapper"/>
-  <bean id="jsonProvider" class="com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider">
+  <bean id="jacksonXmlMapper" class="org.apache.syncope.common.lib.jackson.UnwrappedXmlMapper"/>
+  <bean id="xmlProvider" class="org.apache.syncope.core.rest.cxf.JacksonXMLProvider">
+    <property name="mapper" ref="jacksonXmlMapper"/>
+  </bean>
+
+  <bean id="jacksonObjectMapper" class="org.apache.syncope.common.lib.jackson.UnwrappedObjectMapper"/>
+  <bean id="jsonProvider" class="com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider">
     <property name="mapper" ref="jacksonObjectMapper"/>
   </bean>
 
@@ -91,9 +71,8 @@ under the License.
   
   <bean id="wadlGenerator" class="org.apache.syncope.core.rest.cxf.WadlGenerator">
     <property name="applicationTitle" value="Apache Syncope ${syncope.version}"/>
-    <property name="namespacePrefix" value="syncope"/>
     <property name="linkAnyMediaTypeToXmlSchema" value="true"/>
-    <property name="useJaxbContextForQnames" value="true"/>
+    <property name="useJaxbContextForQnames" value="false"/>
     <property name="addResourceAndMethodIds" value="true"/>
     <property name="ignoreMessageWriters" value="true"/>
     <property name="usePathParamsToCompareOperations" value="false"/>
@@ -109,7 +88,7 @@ under the License.
     <property name="title" value="Apache Syncope"/>
     <property name="version" value="${syncope.version}"/>
     <property name="description" value="Apache Syncope ${syncope.version}"/>    
-    <property name="contact" value="dev@syncope.apache.org"/>
+    <property name="contact" value="dev@syncope.apache.org"/>    
     
     <property name="resourcePackage" value="org.apache.syncope.common.rest.api.service"/>
     <property name="scanAllResources" value="true"/>
@@ -142,7 +121,7 @@ under the License.
     </jaxrs:outInterceptors>
     <jaxrs:providers>
       <ref bean="dateParamConverterProvider"/>
-      <ref bean="jaxbProvider"/>
+      <ref bean="xmlProvider"/>
       <ref bean="jsonProvider"/>
       <ref bean="exceptionMapper"/>
       <ref bean="searchContextProvider"/>

http://git-wip-us.apache.org/repos/asf/syncope/blob/bbe8fe08/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ReportITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ReportITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ReportITCase.java
index 651e9bb..8d2f077 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ReportITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ReportITCase.java
@@ -250,8 +250,8 @@ public class ReportITCase extends AbstractITCase {
         assertNotNull(result);
 
         assertEquals(1, result.getResults().size());
-        assertEquals(execKey, result.getResults().keySet().iterator().next());
-        assertEquals(BulkActionResult.Status.SUCCESS, result.getResults().entrySet().iterator().next().getValue());
+        assertEquals(execKey, result.getResultMap().keySet().iterator().next());
+        assertEquals(BulkActionResult.Status.SUCCESS, result.getResultMap().entrySet().iterator().next().getValue());
     }
 
     @Test

http://git-wip-us.apache.org/repos/asf/syncope/blob/bbe8fe08/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserITCase.java
index 80d1e90..15448fc 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserITCase.java
@@ -26,6 +26,7 @@ import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
 import java.security.AccessControlException;
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Date;
 import java.util.HashMap;
@@ -118,6 +119,18 @@ public class UserITCase extends AbstractITCase {
         return userTO;
     }
 
+    private List<String> getResultByStatus(final BulkActionResult bulkActionResult, final Status status) {
+        List<String> result = new ArrayList<>();
+
+        for (Map.Entry<String, Status> entry : bulkActionResult.getResultMap().entrySet()) {
+            if (entry.getValue() == status) {
+                result.add(entry.getKey());
+            }
+        }
+
+        return Collections.unmodifiableList(result);
+    }
+
     @Test
     public void createUserWithNoPropagation() {
         // create a new user
@@ -1036,20 +1049,20 @@ public class UserITCase extends AbstractITCase {
 
         bulkAction.setType(BulkAction.Type.SUSPEND);
         BulkActionResult res = userService.bulk(bulkAction).readEntity(BulkActionResult.class);
-        assertEquals(10, res.getResultByStatus(Status.SUCCESS).size());
-        assertEquals(1, res.getResultByStatus(Status.FAILURE).size());
-        assertEquals("suspended", userService.read(res.getResultByStatus(Status.SUCCESS).get(3)).getStatus());
+        assertEquals(10, getResultByStatus(res, Status.SUCCESS).size());
+        assertEquals(1, getResultByStatus(res, Status.FAILURE).size());
+        assertEquals("suspended", userService.read(getResultByStatus(res, Status.SUCCESS).get(3)).getStatus());
 
         bulkAction.setType(BulkAction.Type.REACTIVATE);
         res = userService.bulk(bulkAction).readEntity(BulkActionResult.class);
-        assertEquals(10, res.getResultByStatus(Status.SUCCESS).size());
-        assertEquals(1, res.getResultByStatus(Status.FAILURE).size());
-        assertEquals("active", userService.read(res.getResultByStatus(Status.SUCCESS).get(3)).getStatus());
+        assertEquals(10, getResultByStatus(res, Status.SUCCESS).size());
+        assertEquals(1, getResultByStatus(res, Status.FAILURE).size());
+        assertEquals("active", userService.read(getResultByStatus(res, Status.SUCCESS).get(3)).getStatus());
 
         bulkAction.setType(BulkAction.Type.DELETE);
         res = userService.bulk(bulkAction).readEntity(BulkActionResult.class);
-        assertEquals(10, res.getResultByStatus(Status.SUCCESS).size());
-        assertEquals(1, res.getResultByStatus(Status.FAILURE).size());
+        assertEquals(10, getResultByStatus(res, Status.SUCCESS).size());
+        assertEquals(1, getResultByStatus(res, Status.FAILURE).size());
     }
 
     @Test