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:53:39 UTC

[2/5] syncope git commit: Removing JAXB in favor of jackson-dataformat-xml: currently the only missing part is XSD in WADL

http://git-wip-us.apache.org/repos/asf/syncope/blob/f283ebc0/core/rest-cxf/pom.xml
----------------------------------------------------------------------
diff --git a/core/rest-cxf/pom.xml b/core/rest-cxf/pom.xml
index cb4da8a..6230abe 100644
--- a/core/rest-cxf/pom.xml
+++ b/core/rest-cxf/pom.xml
@@ -71,14 +71,14 @@ under the License.
     </dependency>
     
     <dependency>
-      <groupId>com.fasterxml.jackson.datatype</groupId>
-      <artifactId>jackson-datatype-joda</artifactId>
-    </dependency>    
-    <dependency>
       <groupId>com.fasterxml.jackson.jaxrs</groupId>
       <artifactId>jackson-jaxrs-json-provider</artifactId>
     </dependency>
     <dependency>
+      <groupId>com.fasterxml.jackson.jaxrs</groupId>
+      <artifactId>jackson-jaxrs-xml-provider</artifactId>
+    </dependency>
+    <dependency>
       <groupId>com.fasterxml.jackson.module</groupId>
       <artifactId>jackson-module-afterburner</artifactId>
     </dependency>

http://git-wip-us.apache.org/repos/asf/syncope/blob/f283ebc0/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/JacksonXMLProvider.java
----------------------------------------------------------------------
diff --git a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/JacksonXMLProvider.java b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/JacksonXMLProvider.java
new file mode 100644
index 0000000..9e469d1
--- /dev/null
+++ b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/JacksonXMLProvider.java
@@ -0,0 +1,33 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.core.rest.cxf;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.Produces;
+import javax.ws.rs.ext.Provider;
+
+/**
+ * Extends {@link com.fasterxml.jackson.jaxrs.xml.JacksonXMLProvider} only for setting correct {@link Produces} and
+ * {link Consumes} annotations for usage with Apache CXF.
+ */
+@Produces({ "application/xml", "application/*+xml", "text/xml" })
+@Consumes({ "application/xml", "application/*+xml", "text/xml" })
+@Provider
+public class JacksonXMLProvider extends com.fasterxml.jackson.jaxrs.xml.JacksonXMLProvider {
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/f283ebc0/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/UnwrappedObjectMapper.java
----------------------------------------------------------------------
diff --git a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/UnwrappedObjectMapper.java b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/UnwrappedObjectMapper.java
deleted file mode 100644
index 31b1dfd..0000000
--- a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/UnwrappedObjectMapper.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.syncope.core.rest.cxf;
-
-import com.fasterxml.jackson.core.JsonGenerator;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.datatype.joda.JodaModule;
-import java.io.File;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.Writer;
-import java.util.Map;
-
-/**
- * Jackson ObjectMapper that unwraps singleton map values and enable default
- * typing for handling abstract types serialization.
- */
-public class UnwrappedObjectMapper extends ObjectMapper {
-
-    private static final long serialVersionUID = -317191546835195103L;
-
-    public UnwrappedObjectMapper() {
-        super();
-
-        registerModule(new JodaModule());
-        configure(com.fasterxml.jackson.databind.SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
-    }
-
-    /**
-     * Unwraps the given value if it implements the Map interface and contains only a single entry, otherwise the
-     * value is returned unmodified.
-     *
-     * @param value the potential Map to unwrap
-     * @return the unwrapped map or the original value
-     */
-    private Object unwrapMap(final Object value) {
-        if (value instanceof Map) {
-            Map<?, ?> map = (Map<?, ?>) value;
-            if (map.size() == 1) {
-                return map.values().iterator().next();
-            }
-        }
-
-        return value;
-    }
-
-    @Override
-    public void writeValue(final JsonGenerator jgen, final Object value) throws IOException {
-        super.writeValue(jgen, unwrapMap(value));
-    }
-
-    @Override
-    public void writeValue(final File resultFile, final Object value) throws IOException {
-        super.writeValue(resultFile, unwrapMap(value));
-    }
-
-    @Override
-    public void writeValue(final OutputStream out, final Object value) throws IOException {
-        super.writeValue(out, unwrapMap(value));
-    }
-
-    @Override
-    public void writeValue(final Writer writer, final Object value) throws IOException {
-        super.writeValue(writer, unwrapMap(value));
-    }
-
-    @Override
-    public byte[] writeValueAsBytes(final Object value) throws JsonProcessingException {
-        return super.writeValueAsBytes(unwrapMap(value));
-    }
-
-    @Override
-    public String writeValueAsString(final Object value) throws JsonProcessingException {
-        return super.writeValueAsString(unwrapMap(value));
-    }
-}

http://git-wip-us.apache.org/repos/asf/syncope/blob/f283ebc0/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/f283ebc0/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/f283ebc0/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/f283ebc0/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/f283ebc0/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 f7714a1..df3716d 100644
--- a/core/rest-cxf/src/main/resources/restCXFContext.xml
+++ b/core/rest-cxf/src/main/resources/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"/>
@@ -130,7 +109,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/f283ebc0/ext/camel/common-lib/src/main/java/org/apache/syncope/common/lib/to/CamelMetrics.java
----------------------------------------------------------------------
diff --git a/ext/camel/common-lib/src/main/java/org/apache/syncope/common/lib/to/CamelMetrics.java b/ext/camel/common-lib/src/main/java/org/apache/syncope/common/lib/to/CamelMetrics.java
index 050c63c..2d4df04 100644
--- a/ext/camel/common-lib/src/main/java/org/apache/syncope/common/lib/to/CamelMetrics.java
+++ b/ext/camel/common-lib/src/main/java/org/apache/syncope/common/lib/to/CamelMetrics.java
@@ -18,23 +18,14 @@
  */
 package org.apache.syncope.common.lib.to;
 
-import com.fasterxml.jackson.annotation.JsonProperty;
 import java.util.ArrayList;
 import java.util.List;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlElementWrapper;
-import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlType;
 import org.apache.syncope.common.lib.AbstractBaseBean;
 
-@XmlRootElement(name = "camelMetrics")
-@XmlType
 public class CamelMetrics extends AbstractBaseBean {
 
     private static final long serialVersionUID = -391404198406614231L;
 
-    @XmlRootElement(name = "meanRate")
-    @XmlType
     public static class MeanRate extends AbstractBaseBean {
 
         private static final long serialVersionUID = -233921226510124154L;
@@ -63,9 +54,6 @@ public class CamelMetrics extends AbstractBaseBean {
 
     private final List<MeanRate> responseMeanRates = new ArrayList<>();
 
-    @XmlElementWrapper(name = "responseMeanRates")
-    @XmlElement(name = "meanRate")
-    @JsonProperty("responseMeanRates")
     public List<MeanRate> getResponseMeanRates() {
         return responseMeanRates;
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/f283ebc0/ext/camel/common-lib/src/main/java/org/apache/syncope/common/lib/to/CamelRouteTO.java
----------------------------------------------------------------------
diff --git a/ext/camel/common-lib/src/main/java/org/apache/syncope/common/lib/to/CamelRouteTO.java b/ext/camel/common-lib/src/main/java/org/apache/syncope/common/lib/to/CamelRouteTO.java
index cb64fb6..8c18403 100644
--- a/ext/camel/common-lib/src/main/java/org/apache/syncope/common/lib/to/CamelRouteTO.java
+++ b/ext/camel/common-lib/src/main/java/org/apache/syncope/common/lib/to/CamelRouteTO.java
@@ -19,13 +19,9 @@ package org.apache.syncope.common.lib.to;
  * under the License.
  */
 import javax.ws.rs.PathParam;
-import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlType;
 import org.apache.syncope.common.lib.AbstractBaseBean;
 import org.apache.syncope.common.lib.types.AnyTypeKind;
 
-@XmlRootElement(name = "camelRoute")
-@XmlType
 public class CamelRouteTO extends AbstractBaseBean {
 
     private static final long serialVersionUID = 6431992877435181674L;

http://git-wip-us.apache.org/repos/asf/syncope/blob/f283ebc0/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/f283ebc0/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/f283ebc0/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

http://git-wip-us.apache.org/repos/asf/syncope/blob/f283ebc0/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 84cfb94..28fbd43 100644
--- a/pom.xml
+++ b/pom.xml
@@ -518,11 +518,6 @@ under the License.
       </dependency>
       <dependency>
         <groupId>org.apache.cxf</groupId>
-        <artifactId>cxf-rt-databinding-jaxb</artifactId>
-        <version>${cxf.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>org.apache.cxf</groupId>
         <artifactId>cxf-rt-rs-client</artifactId>
         <version>${cxf.version}</version>
       </dependency>
@@ -658,6 +653,11 @@ under the License.
         <version>${jackson.version}</version>
       </dependency>
       <dependency>
+        <groupId>com.fasterxml.jackson.jaxrs</groupId>
+        <artifactId>jackson-jaxrs-xml-provider</artifactId>
+        <version>${jackson.version}</version>
+      </dependency>
+      <dependency>
         <groupId>com.fasterxml.jackson.module</groupId>
         <artifactId>jackson-module-afterburner</artifactId>
         <version>${jackson.version}</version>