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/12/01 08:29:24 UTC

[4/6] syncope git commit: [SYNCOPE-978] REST resource provided, consolidated wssample into syncope-fit-build-tools

http://git-wip-us.apache.org/repos/asf/syncope/blob/5af8e4a4/fit/core-reference/src/test/resources/rest/DeleteScript.groovy
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/resources/rest/DeleteScript.groovy b/fit/core-reference/src/test/resources/rest/DeleteScript.groovy
new file mode 100644
index 0000000..7cf805a
--- /dev/null
+++ b/fit/core-reference/src/test/resources/rest/DeleteScript.groovy
@@ -0,0 +1,44 @@
+/*
+ * 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.
+ */
+import org.apache.cxf.jaxrs.client.WebClient
+
+// Parameters:
+// The connector sends the following:
+// client : CXF WebClient
+// action: a string describing the action ("DELETE" here)
+// log: a handler to the Log facility
+// objectClass: a String describing the Object class (__ACCOUNT__ / __GROUP__ / other)
+// options: a handler to the OperationOptions Map
+// uid: String for the unique id that specifies the object to delete
+
+log.info("Entering " + action + " Script");
+
+WebClient webClient = client;
+
+assert uid != null
+
+switch ( objectClass ) {
+case "__ACCOUNT__":
+  webClient.path("/users/" + uid);
+  webClient.delete();
+  break
+
+default:
+  break
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/5af8e4a4/fit/core-reference/src/test/resources/rest/SchemaScript.groovy
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/resources/rest/SchemaScript.groovy b/fit/core-reference/src/test/resources/rest/SchemaScript.groovy
new file mode 100644
index 0000000..ecf7080
--- /dev/null
+++ b/fit/core-reference/src/test/resources/rest/SchemaScript.groovy
@@ -0,0 +1,51 @@
+/*
+ * 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.
+ */
+import org.identityconnectors.common.security.GuardedString
+import org.identityconnectors.framework.common.objects.AttributeInfo
+import org.identityconnectors.framework.common.objects.AttributeInfo.Flags
+import org.identityconnectors.framework.common.objects.AttributeInfoBuilder
+import org.identityconnectors.framework.common.objects.ObjectClassInfo
+import org.identityconnectors.framework.common.objects.ObjectClassInfoBuilder
+
+// Parameters:
+// The connector sends the following:
+// action: a string describing the action ("SCHEMA" here)
+// log: a handler to the Log facility
+// builder: SchemaBuilder instance for the connector
+//
+// The connector will make the final call to builder.build()
+// so the scipt just need to declare the different object types.
+
+log.info("Entering " + action + " Script");
+
+idAIB = new AttributeInfoBuilder("key", String.class);
+idAIB.setRequired(true);
+
+orgAttrsInfo = new HashSet<AttributeInfo>();
+orgAttrsInfo.add(idAIB.build());
+orgAttrsInfo.add(AttributeInfoBuilder.build("username", String.class));
+orgAttrsInfo.add(AttributeInfoBuilder.build("password", GuardedString.class));
+orgAttrsInfo.add(AttributeInfoBuilder.build("firstName", String.class));
+orgAttrsInfo.add(AttributeInfoBuilder.build("surname", String.class));
+orgAttrsInfo.add(AttributeInfoBuilder.build("email", String.class));
+
+ObjectClassInfo oci = new ObjectClassInfoBuilder().setType("__ACCOUNT__").addAllAttributeInfo(orgAttrsInfo).build();
+builder.defineObjectClass(oci);
+
+log.info(action + " script done");
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/syncope/blob/5af8e4a4/fit/core-reference/src/test/resources/rest/SearchScript.groovy
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/resources/rest/SearchScript.groovy b/fit/core-reference/src/test/resources/rest/SearchScript.groovy
new file mode 100644
index 0000000..c4fe900
--- /dev/null
+++ b/fit/core-reference/src/test/resources/rest/SearchScript.groovy
@@ -0,0 +1,100 @@
+/*
+ * 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.
+ */
+import com.fasterxml.jackson.databind.ObjectMapper
+import com.fasterxml.jackson.databind.node.ArrayNode
+import com.fasterxml.jackson.databind.node.ObjectNode
+import javax.ws.rs.core.Response
+import org.apache.cxf.jaxrs.client.WebClient
+import org.identityconnectors.common.security.GuardedString
+
+// Parameters:
+// The connector sends the following:
+// client : CXF WebClient
+// objectClass: a String describing the Object class (__ACCOUNT__ / __GROUP__ / other)
+// action: a string describing the action ("SEARCH" here)
+// log: a handler to the Log facility
+// options: a handler to the OperationOptions Map
+// query: a handler to the Query Map
+//
+// The Query map describes the filter used (via FIQL's ConditionType):
+//
+// query = [ operation: "EQUALS", left: attribute, right: "value" ]
+// query = [ operation: "GREATER_THAN", left: attribute, right: "value" ]
+// query = [ operation: "GREATER_OR_EQUALS", left: attribute, right: "value" ]
+// query = [ operation: "LESS_THAN", left: attribute, right: "value" ]
+// query = [ operation: "LESS_OR_EQUALS", left: attribute, right: "value" ]
+// query = null : then we assume we fetch everything
+//
+// AND and OR filter just embed a left/right couple of queries.
+// query = [ operation: "AND", left: query1, right: query2 ]
+// query = [ operation: "OR", left: query1, right: query2 ]
+//
+// Returns: A list of Maps. Each map describing one row.
+// !!!! Each Map must contain a '__UID__' and '__NAME__' attribute.
+// This is required to build a ConnectorObject.
+
+def buildConnectorObject(node) {
+  return [
+    __UID__:node.get("key").textValue(), 
+    __NAME__:node.get("key").textValue(),
+    username:node.get("username").textValue(),
+    password:node.has("password") && node.get("password").textValue() != null
+      ? new GuardedString(node.get("password").textValue().toCharArray()) 
+      : null,
+    firstName:node.get("firstName").textValue(),
+    surname:node.get("surname").textValue(),
+    email:node.get("email").textValue()
+  ];
+}
+
+log.info("Entering " + action + " Script");
+
+WebClient webClient = client;
+ObjectMapper mapper = new ObjectMapper();
+
+def result = []
+
+switch (objectClass) {
+case "__ACCOUNT__":
+  if (query == null || (!query.get("left").equals("__UID__") && !query.get("conditionType").equals("EQUALS"))) {
+    webClient.path("/users");
+    Response response = webClient.get();    
+    ArrayNode node = mapper.readTree(response.getEntity());
+    
+    for (i = 0; i < node.size(); i++) {
+      result.add(buildConnectorObject(node.get(i)));
+    }
+  } else {
+    webClient.path("/users/" + query.get("right"));
+    Response response = webClient.get();
+    if (response.getStatus() == 200) {
+      ObjectNode node = mapper.readTree(response.getEntity());
+      result.add(buildConnectorObject(node));
+    } else {
+      log.warn("Could not read object {0}", query.get("right"));
+    }
+  }
+
+  break
+
+default:
+  result;
+}
+
+return result;

http://git-wip-us.apache.org/repos/asf/syncope/blob/5af8e4a4/fit/core-reference/src/test/resources/rest/SyncScript.groovy
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/resources/rest/SyncScript.groovy b/fit/core-reference/src/test/resources/rest/SyncScript.groovy
new file mode 100644
index 0000000..a15636c
--- /dev/null
+++ b/fit/core-reference/src/test/resources/rest/SyncScript.groovy
@@ -0,0 +1,106 @@
+/*
+ * 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.
+ */
+import com.fasterxml.jackson.databind.ObjectMapper
+import com.fasterxml.jackson.databind.node.ArrayNode
+import java.util.Date;
+import javax.ws.rs.core.Response
+import org.apache.cxf.jaxrs.client.WebClient
+import org.identityconnectors.common.security.GuardedString
+
+// Parameters:
+// The connector sends the following:
+// client : CXF WebClient
+// objectClass: a String describing the Object class (__ACCOUNT__ / __GROUP__ / other)
+// action: a string describing the action ("SYNC" or "GET_LATEST_SYNC_TOKEN" here)
+// log: a handler to the Log facility
+// options: a handler to the OperationOptions Map (null if action = "GET_LATEST_SYNC_TOKEN")
+// token: a handler to an Object representing the sync token (null if action = "GET_LATEST_SYNC_TOKEN")
+//
+//
+// Returns:
+// if action = "GET_LATEST_SYNC_TOKEN", it must return an object representing the last known
+// sync token for the corresponding ObjectClass
+// 
+// if action = "SYNC":
+// A list of Maps . Each map describing one update:
+// Map should look like the following:
+//
+// [
+// "token": <Object> token object (could be Integer, Date, String) , [!! could be null]
+// "operation":<String> ("CREATE_OR_UPDATE"|"DELETE")  will always default to CREATE_OR_DELETE ,
+// "uid":<String> uid  (uid of the entry) ,
+// "previousUid":<String> prevuid (This is for rename ops) ,
+// "password":<String> password (optional... allows to pass clear text password if needed),
+// "attributes":Map<String,List> of attributes name/values
+// ]
+
+def buildConnectorObject(node) {
+  return [
+    __UID__:node.get("key").textValue(), 
+    __NAME__:node.get("key").textValue(),
+    username:node.get("username").textValue(),
+    password:new GuardedString(node.get("password").textValue().toCharArray()),
+    firstName:node.get("firstName").textValue(),
+    surname:node.get("surname").textValue(),
+    email:node.get("email").textValue()
+  ];
+}
+
+log.info("Entering " + action + " Script");
+
+WebClient webClient = client;
+ObjectMapper mapper = new ObjectMapper();
+
+if (action.equalsIgnoreCase("GET_LATEST_SYNC_TOKEN")) {
+  switch (objectClass) {
+  case "__ACCOUNT__":
+    latestToken = new Date().getTime();
+    break;
+    
+  default:
+    latestToken = null;
+  }
+
+  return latestToken;
+} else if (action.equalsIgnoreCase("SYNC")) {
+  def result = [];
+
+  switch (objectClass) {
+  case "__ACCOUNT__":
+    webClient.path("/users");
+    Response response = webClient.get();    
+    ArrayNode node = mapper.readTree(response.getEntity());
+    
+    for (i = 0; i < node.size(); i++) {
+      result.add([
+          operation:"CREATE_OR_UPDATE",
+          uid:node.get(i).get("key").textValue(),
+          token:new Date().getTime(),
+          attributes:buildConnectorObject(node.get(i))
+        ]);
+    }
+    break;
+  }
+  
+  log.ok("Sync script: found " + result.size() + " events to sync");
+  return result;
+} else {
+  log.error("Sync script: action '" + action + "' is not implemented in this script");
+  return null;
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/5af8e4a4/fit/core-reference/src/test/resources/rest/TestScript.groovy
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/resources/rest/TestScript.groovy b/fit/core-reference/src/test/resources/rest/TestScript.groovy
new file mode 100644
index 0000000..c27ddee
--- /dev/null
+++ b/fit/core-reference/src/test/resources/rest/TestScript.groovy
@@ -0,0 +1,35 @@
+/*
+ * 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.
+ */
+import com.fasterxml.jackson.databind.ObjectMapper
+import org.apache.cxf.jaxrs.client.WebClient
+
+// Parameters:
+// The connector sends the following:
+// client : CXF WebClient
+// action: a string describing the action ("TEST" here)
+// log: a handler to the Log facility
+
+log.info("Entering " + action + " Script");
+
+WebClient webClient = client;
+ObjectMapper mapper = new ObjectMapper();
+
+ webClient.path("/users", false);
+ webClient.get();
+ 
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/syncope/blob/5af8e4a4/fit/core-reference/src/test/resources/rest/UpdateScript.groovy
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/resources/rest/UpdateScript.groovy b/fit/core-reference/src/test/resources/rest/UpdateScript.groovy
new file mode 100644
index 0000000..37371a7
--- /dev/null
+++ b/fit/core-reference/src/test/resources/rest/UpdateScript.groovy
@@ -0,0 +1,98 @@
+/*
+ * 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.
+ */
+import com.fasterxml.jackson.databind.ObjectMapper
+import com.fasterxml.jackson.databind.node.ObjectNode
+import org.apache.cxf.jaxrs.client.WebClient
+
+// Parameters:
+// The connector sends us the following:
+// client : CXF WebClient
+//
+// action: String correponding to the action (UPDATE/ADD_ATTRIBUTE_VALUES/REMOVE_ATTRIBUTE_VALUES)
+//   - UPDATE : For each input attribute, replace all of the current values of that attribute
+//     in the target object with the values of that attribute.
+//   - ADD_ATTRIBUTE_VALUES: For each attribute that the input set contains, add to the current values
+//     of that attribute in the target object all of the values of that attribute in the input set.
+//   - REMOVE_ATTRIBUTE_VALUES: For each attribute that the input set contains, remove from the current values
+//     of that attribute in the target object any value that matches one of the values of the attribute from the input set.
+
+// log: a handler to the Log facility
+//
+// objectClass: a String describing the Object class (__ACCOUNT__ / __GROUP__ / other)
+//
+// uid: a String representing the entry uid
+//
+// attributes: an Attribute Map, containg the <String> attribute name as a key
+// and the <List> attribute value(s) as value.
+//
+// password: password string, clear text (only for UPDATE)
+//
+// options: a handler to the OperationOptions Map
+
+log.info("Entering " + action + " Script");
+
+WebClient webClient = client;
+ObjectMapper mapper = new ObjectMapper();
+
+assert uid != null
+
+switch (action) {
+case "UPDATE":
+  switch (objectClass) {  
+  case "__ACCOUNT__":
+    ObjectNode node = mapper.createObjectNode();
+    node.set("key", node.textNode(uid));
+    if (attributes.containsKey("__NAME__")) {
+      node.set("username", node.textNode(attributes.get("__NAME__").get(0)));
+    }
+    if (attributes.containsKey("username")) {
+      node.set("username", node.textNode(attributes.get("username").get(0)));
+    }
+    if (password != null) {
+      node.set("password", node.textNode(password));
+    }
+    if (attributes.containsKey("firstName")) {
+      node.set("firstName", node.textNode(attributes.get("firstName").get(0)));
+    }
+    if (attributes.containsKey("surname")) {
+      node.set("surname", node.textNode(attributes.get("surname").get(0)));
+    }
+    if (attributes.containsKey("email")) {
+      node.set("email", node.textNode(attributes.get("email").get(0)));
+    }
+    
+    String payload = mapper.writeValueAsString(node);
+
+    webClient.path("/users/" + uid);
+    webClient.put(payload);
+
+  default:
+    break
+  }
+
+  return uid;
+  break
+
+case "ADD_ATTRIBUTE_VALUES":
+  break
+
+
+default:
+  break
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/syncope/blob/5af8e4a4/fit/enduser-reference/pom.xml
----------------------------------------------------------------------
diff --git a/fit/enduser-reference/pom.xml b/fit/enduser-reference/pom.xml
index 03d6eb3..9694885 100644
--- a/fit/enduser-reference/pom.xml
+++ b/fit/enduser-reference/pom.xml
@@ -103,12 +103,6 @@ under the License.
       <scope>test</scope>
     </dependency>
     <dependency>
-      <groupId>net.tirasa.connid.bundles.soap</groupId>
-      <artifactId>wssample</artifactId>
-      <type>war</type>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
       <groupId>com.h2database</groupId>
       <artifactId>h2</artifactId>
       <scope>test</scope>
@@ -304,14 +298,6 @@ under the License.
           </configuration>
           <deployables>
             <deployable>
-              <groupId>net.tirasa.connid.bundles.soap</groupId>
-              <artifactId>wssample</artifactId>
-              <type>war</type>
-              <properties>
-                <context>wssample</context>
-              </properties>
-            </deployable>
-            <deployable>
               <groupId>org.apache.syncope.fit</groupId>
               <artifactId>syncope-fit-build-tools</artifactId>
               <type>war</type>

http://git-wip-us.apache.org/repos/asf/syncope/blob/5af8e4a4/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 5c301ca..9c4a7fe 100644
--- a/pom.xml
+++ b/pom.xml
@@ -351,6 +351,7 @@ under the License.
 
     <connid.version>1.4.2.0</connid.version>
     <connid.soap.version>1.4.2-SNAPSHOT</connid.soap.version>
+    <connid.rest.version>1.0.1</connid.rest.version>
     <connid.database.version>2.2.4</connid.database.version>
     <connid.csvdir.version>0.8.5</connid.csvdir.version>
     <connid.ldap.version>1.5.1</connid.ldap.version>
@@ -1343,13 +1344,6 @@ under the License.
         <scope>test</scope>
       </dependency>
       <dependency>
-        <groupId>net.tirasa.connid.bundles.soap</groupId>
-        <artifactId>wssample</artifactId>
-        <version>${connid.soap.version}</version>
-        <type>war</type>
-        <scope>test</scope>
-      </dependency>
-      <dependency>
         <groupId>com.icegreen</groupId>
         <artifactId>greenmail</artifactId>
         <version>1.5.2</version>
@@ -1455,6 +1449,11 @@ under the License.
               </artifactItem>
               <artifactItem>
                 <groupId>net.tirasa.connid.bundles</groupId>
+                <artifactId>net.tirasa.connid.bundles.rest</artifactId>
+                <version>${connid.rest.version}</version>
+              </artifactItem>
+              <artifactItem>
+                <groupId>net.tirasa.connid.bundles</groupId>
                 <artifactId>net.tirasa.connid.bundles.csvdir</artifactId>
                 <version>${connid.csvdir.version}</version>
               </artifactItem>

http://git-wip-us.apache.org/repos/asf/syncope/blob/5af8e4a4/src/main/asciidoc/getting-started/obtain.adoc
----------------------------------------------------------------------
diff --git a/src/main/asciidoc/getting-started/obtain.adoc b/src/main/asciidoc/getting-started/obtain.adoc
index a1c6559..08471de 100644
--- a/src/main/asciidoc/getting-started/obtain.adoc
+++ b/src/main/asciidoc/getting-started/obtain.adoc
@@ -450,9 +450,10 @@ You can configure any LDAP client (such as http://jxplorer.org/[JXplorer^], for
  bind password: `secret`
 
 | External resource: SOAP
-| An example SOAP server is available at http://localhost:9080/wssample/services +
- +
- You can check its internal data by visiting http://localhost:9080/wssample/exploredb.jsp
+| An example SOAP service is available at http://localhost:9080/syncope-fit-build-tools/cxf/soap
+
+| External resource: REST
+| An example REST service is available at http://localhost:9080/syncope-fit-build-tools/cxf/rest
 
 | External resource: database
 | http://www.h2database.com/[H2^] TCP database is available. +

http://git-wip-us.apache.org/repos/asf/syncope/blob/5af8e4a4/standalone/pom.xml
----------------------------------------------------------------------
diff --git a/standalone/pom.xml b/standalone/pom.xml
index eee4b8b..4a0adfd 100644
--- a/standalone/pom.xml
+++ b/standalone/pom.xml
@@ -46,12 +46,6 @@ under the License.
 
   <dependencies>
     <dependency>
-      <groupId>net.tirasa.connid.bundles.soap</groupId>
-      <artifactId>wssample</artifactId>
-      <type>war</type>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
       <groupId>org.apache.syncope.fit</groupId>
       <artifactId>syncope-fit-build-tools</artifactId>
       <version>${project.version}</version>
@@ -168,18 +162,15 @@ under the License.
                 <mkdir dir="${work.dir}/apache-tomcat-${tomcat.version}/${test.csvdir.path}" />
                 <copy file="../fit/core-reference/src/test/resources/test.csv" todir="${work.dir}/apache-tomcat-${tomcat.version}/${test.csvdir.path}" />
 
-                <!-- ConnId's SOAP wssample (provides endpoint for SOAP resources) -->
-                <copy file="${settings.localRepository}/net/tirasa/connid/bundles/soap/wssample/${connid.soap.version}/wssample-${connid.soap.version}.war" tofile="${work.dir}/apache-tomcat-${tomcat.version}/webapps/wssample.war" />
-
-                <!-- Syncope build tools (provide H2 and Apache DS resources + ConnId connector server) -->
-                <copy todir="${work.dir}/apache-tomcat-${tomcat.version}/webapps/syncope-build-tools">
+                <!-- Syncope build tools (provide H2, Apache DS and REST / SOAP resources + ConnId connector server) -->
+                <copy todir="${work.dir}/apache-tomcat-${tomcat.version}/webapps/syncope-fit-build-tools">
                   <fileset dir="../fit/build-tools/target/syncope-fit-build-tools-${project.version}" includes="**/*" />
                 </copy>
-                <copy todir="${work.dir}/apache-tomcat-${tomcat.version}/webapps/syncope-build-tools/WEB-INF/lib">
+                <copy todir="${work.dir}/apache-tomcat-${tomcat.version}/webapps/syncope-fit-build-tools/WEB-INF/lib">
                   <fileset dir="../fit/core-reference/target/bundles/" includes="**/*" />
                 </copy>
-                <zip destfile="${work.dir}/apache-tomcat-${tomcat.version}/webapps/syncope-build-tools.war" basedir="${work.dir}/apache-tomcat-${tomcat.version}/webapps/syncope-build-tools" />
-                <delete dir="${work.dir}/apache-tomcat-${tomcat.version}/webapps/syncope-build-tools" />
+                <zip destfile="${work.dir}/apache-tomcat-${tomcat.version}/webapps/syncope-fit-build-tools.war" basedir="${work.dir}/apache-tomcat-${tomcat.version}/webapps/syncope-fit-build-tools" />
+                <delete dir="${work.dir}/apache-tomcat-${tomcat.version}/webapps/syncope-fit-build-tools" />
 
                 <!-- Tomcat shared libraries: H2, groovy, StAX2 API, Woodstox -->
                 <copy file="${settings.localRepository}/com/h2database/h2/${h2.version}/h2-${h2.version}.jar" todir="${work.dir}/apache-tomcat-${tomcat.version}/lib" />
@@ -265,6 +256,11 @@ under the License.
         <targetPath>core/scriptedsql</targetPath>
         <filtering>true</filtering>
       </resource>
+      <resource>
+        <directory>../fit/core-reference/src/test/resources/rest</directory>
+        <targetPath>core/rest</targetPath>
+        <filtering>true</filtering>
+      </resource>
 
       <resource>
         <directory>../fit/console-reference/src/main/resources</directory>