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 2017/04/18 08:43:11 UTC

[1/7] syncope git commit: Fixing after BATIK-1185

Repository: syncope
Updated Branches:
  refs/heads/2_0_X 51d0bb463 -> 3da6a0455
  refs/heads/master f71932502 -> aa36e2ab5


Fixing after BATIK-1185


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

Branch: refs/heads/2_0_X
Commit: 904be1a0e62759ac64638fd468fd484d6d2065d2
Parents: 51d0bb4
Author: Francesco Chicchiricc� <il...@apache.org>
Authored: Tue Apr 18 10:29:09 2017 +0200
Committer: Francesco Chicchiricc� <il...@apache.org>
Committed: Tue Apr 18 10:29:09 2017 +0200

----------------------------------------------------------------------
 core/logic/pom.xml |  8 ++++++++
 pom.xml            | 12 +++++++++++-
 2 files changed, 19 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/904be1a0/core/logic/pom.xml
----------------------------------------------------------------------
diff --git a/core/logic/pom.xml b/core/logic/pom.xml
index 967e9d7..cac3540 100644
--- a/core/logic/pom.xml
+++ b/core/logic/pom.xml
@@ -79,6 +79,14 @@ under the License.
       <groupId>org.apache.xmlgraphics</groupId>
       <artifactId>fop</artifactId>
     </dependency>
+    <dependency>
+      <groupId>org.apache.xmlgraphics</groupId>
+      <artifactId>batik-i18n</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.xmlgraphics</groupId>
+      <artifactId>batik-constants</artifactId>
+    </dependency>
 
     <dependency>
       <groupId>org.apache.logging.log4j</groupId>

http://git-wip-us.apache.org/repos/asf/syncope/blob/904be1a0/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index b6bdb56..cfa0ba0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -995,7 +995,17 @@ under the License.
           </exclusion>
         </exclusions>
       </dependency>
-            
+      <dependency>
+        <groupId>org.apache.xmlgraphics</groupId>
+        <artifactId>batik-i18n</artifactId>
+        <version>1.9</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.xmlgraphics</groupId>
+        <artifactId>batik-constants</artifactId>
+        <version>1.9</version>
+      </dependency>
+
       <!-- Activiti -->
       <dependency>
         <groupId>org.activiti</groupId>


[3/7] syncope git commit: [SYNCOPE-1066] Avoid invoking REST via HTTP to fetch the generated WADL; rather getting it via Spring bean

Posted by il...@apache.org.
[SYNCOPE-1066] Avoid invoking REST via HTTP to fetch the generated WADL; rather getting it via Spring bean


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

Branch: refs/heads/2_0_X
Commit: 3da6a0455d99e8c97e184072f54362d6801297fc
Parents: 89530be
Author: Francesco Chicchiricc� <il...@apache.org>
Authored: Tue Apr 18 10:41:41 2017 +0200
Committer: Francesco Chicchiricc� <il...@apache.org>
Committed: Tue Apr 18 10:41:41 2017 +0200

----------------------------------------------------------------------
 .../syncope/core/rest/cxf/WADLServlet.java      | 13 ++--
 .../syncope/core/rest/cxf/WadlGenerator.java    | 74 +++++++++++++++++++-
 .../src/main/resources/log4j2.xml               |  4 ++
 3 files changed, 83 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/3da6a045/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/WADLServlet.java
----------------------------------------------------------------------
diff --git a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/WADLServlet.java b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/WADLServlet.java
index 534ae9f..e421909 100644
--- a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/WADLServlet.java
+++ b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/WADLServlet.java
@@ -18,10 +18,10 @@
  */
 package org.apache.syncope.core.rest.cxf;
 
+import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
-import java.net.URL;
 import java.rmi.ServerException;
 import java.util.HashMap;
 import java.util.Map;
@@ -39,7 +39,7 @@ import org.apache.cocoon.sax.component.XMLGenerator;
 import org.apache.cocoon.sax.component.XMLSerializer;
 import org.apache.cocoon.sax.component.XSLTTransformer;
 import org.apache.commons.io.IOUtils;
-import org.apache.commons.lang3.StringUtils;
+import org.apache.syncope.core.spring.ApplicationContextProvider;
 
 public class WADLServlet extends HttpServlet {
 
@@ -73,10 +73,11 @@ public class WADLServlet extends HttpServlet {
 
         Matcher schemaMatcher = SCHEMA_PATTERN.matcher(request.getServletPath());
 
+        WadlGenerator wadlGenerator = ApplicationContextProvider.getApplicationContext().getBean(WadlGenerator.class);
+        String wadl = wadlGenerator.getWadl();
+
         Pipeline<SAXPipelineComponent> pipeline = new CachingPipeline<>();
-        String wadlURL = StringUtils.substringBeforeLast(request.getRequestURL().toString(), "/")
-                + "/rest/?_wadl";
-        pipeline.addComponent(new XMLGenerator(new URL(wadlURL)));
+        pipeline.addComponent(new XMLGenerator(wadl));
         if ("/index.html".equals(request.getServletPath())) {
             XSLTTransformer xslt = new XSLTTransformer(getClass().getResource("/wadl2html/index.xsl"));
 
@@ -102,7 +103,7 @@ public class WADLServlet extends HttpServlet {
         } else if ("/syncope.wadl".equals(request.getServletPath())) {
             response.setContentType(MediaType.APPLICATION_XML);
 
-            InputStream in = new URL(wadlURL).openStream();
+            InputStream in = new ByteArrayInputStream(wadl.getBytes());
             OutputStream out = response.getOutputStream();
             try {
                 IOUtils.copy(in, out);

http://git-wip-us.apache.org/repos/asf/syncope/blob/3da6a045/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/WadlGenerator.java
----------------------------------------------------------------------
diff --git a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/WadlGenerator.java b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/WadlGenerator.java
index 444e58e..8595293 100644
--- a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/WadlGenerator.java
+++ b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/WadlGenerator.java
@@ -18,8 +18,21 @@
  */
 package org.apache.syncope.core.rest.cxf;
 
+import java.lang.annotation.Annotation;
 import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+import javax.ws.rs.Path;
 import javax.ws.rs.container.ContainerRequestContext;
+import org.apache.commons.collections4.IterableUtils;
+import org.apache.commons.collections4.Predicate;
+import org.apache.cxf.BusFactory;
+import org.apache.cxf.common.util.ClasspathScanner;
+import org.apache.cxf.jaxrs.model.ClassResourceInfo;
+import org.apache.cxf.jaxrs.utils.InjectionUtils;
+import org.apache.cxf.jaxrs.utils.ResourceUtils;
 
 /**
  * Automatically loads available javadocs from class loader (when {@link java.net.URLClassLoader}).
@@ -28,8 +41,9 @@ public class WadlGenerator extends org.apache.cxf.jaxrs.model.wadl.WadlGenerator
 
     private boolean inited = false;
 
-    @Override
-    public void filter(final ContainerRequestContext context) {
+    private String wadl = null;
+
+    private void init() {
         synchronized (this) {
             if (!inited) {
                 URL[] javaDocURLs = JavaDocUtils.getJavaDocURLs();
@@ -40,8 +54,64 @@ public class WadlGenerator extends org.apache.cxf.jaxrs.model.wadl.WadlGenerator
                 inited = true;
             }
         }
+    }
 
+    @Override
+    public void filter(final ContainerRequestContext context) {
+        init();
         super.filter(context);
     }
 
+    public String getWadl() {
+        synchronized (this) {
+            if (wadl == null) {
+                init();
+
+                List<Class<?>> resourceClasses = new ArrayList<>();
+                try {
+                    List<Class<? extends Annotation>> anns = new ArrayList<>();
+                    anns.add(Path.class);
+                    Map<Class<? extends Annotation>, Collection<Class<?>>> discoveredClasses =
+                            ClasspathScanner.findClasses(ClasspathScanner.parsePackages(
+                                    "org.apache.syncope.common.rest.api.service"),
+                                    anns);
+                    if (discoveredClasses.containsKey(Path.class)) {
+                        resourceClasses.addAll(discoveredClasses.get(Path.class));
+                    }
+                } catch (Exception e) {
+                    // ignore
+                }
+
+                List<ClassResourceInfo> classResourceInfos = new ArrayList<>();
+                for (final Class<?> beanClass : resourceClasses) {
+                    ClassResourceInfo cri = IterableUtils.find(classResourceInfos, new Predicate<ClassResourceInfo>() {
+
+                        @Override
+                        public boolean evaluate(final ClassResourceInfo cri) {
+                            return cri.isCreatedFromModel() && cri.isRoot()
+                                    && cri.getServiceClass().isAssignableFrom(beanClass);
+                        }
+                    });
+                    if (cri != null) {
+                        if (!InjectionUtils.isConcreteClass(cri.getServiceClass())) {
+                            cri = new ClassResourceInfo(cri);
+                            classResourceInfos.add(cri);
+                        }
+                        cri.setResourceClass(beanClass);
+                        continue;
+                    }
+
+                    cri = ResourceUtils.createClassResourceInfo(
+                            beanClass, beanClass, true, true, BusFactory.getDefaultBus());
+                    if (cri != null) {
+                        classResourceInfos.add(cri);
+                    }
+                }
+
+                wadl = generateWADL("/", classResourceInfos, false, null, null).toString();
+            }
+        }
+
+        return wadl;
+    }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/3da6a045/fit/core-reference/src/main/resources/log4j2.xml
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/main/resources/log4j2.xml b/fit/core-reference/src/main/resources/log4j2.xml
index bc4771c..19f5cc4 100644
--- a/fit/core-reference/src/main/resources/log4j2.xml
+++ b/fit/core-reference/src/main/resources/log4j2.xml
@@ -144,6 +144,10 @@ under the License.
       <appender-ref ref="mainFile"/>
       <appender-ref ref="main"/>
     </asyncLogger>
+    <asyncLogger name="org.apache.cocoon" additivity="false" level="ERROR">
+      <appender-ref ref="mainFile"/>
+      <appender-ref ref="main"/>
+    </asyncLogger>
     <asyncLogger name="org.apache.camel" additivity="false" level="ERROR">
       <appender-ref ref="mainFile"/>
       <appender-ref ref="main"/>


[2/7] syncope git commit: Fixing AOP class name extraction for Camel components

Posted by il...@apache.org.
Fixing AOP class name extraction for Camel components


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

Branch: refs/heads/2_0_X
Commit: 89530be82b38b5fba4292e034bfc233d14c3a45c
Parents: 904be1a
Author: Francesco Chicchiricc� <il...@apache.org>
Authored: Tue Apr 18 10:32:35 2017 +0200
Committer: Francesco Chicchiricc� <il...@apache.org>
Committed: Tue Apr 18 10:32:35 2017 +0200

----------------------------------------------------------------------
 .../main/java/org/apache/syncope/core/logic/SyncopeLogic.java  | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/89530be8/core/logic/src/main/java/org/apache/syncope/core/logic/SyncopeLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/SyncopeLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/SyncopeLogic.java
index 2d0d920..36cc50c 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/SyncopeLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/SyncopeLogic.java
@@ -173,9 +173,9 @@ public class SyncopeLogic extends AbstractLogic<AbstractBaseBean> {
                 PLATFORM_INFO.setGroupWorkflowAdapter(AopUtils.getTargetClass(gwfAdapter).getName());
                 PLATFORM_INFO.setGroupWorkflowAdapterSupportEdit(gwfAdapter.supportsDefinitionEdit());
 
-                PLATFORM_INFO.setAnyObjectProvisioningManager(aProvisioningManager.getClass().getName());
-                PLATFORM_INFO.setUserProvisioningManager(uProvisioningManager.getClass().getName());
-                PLATFORM_INFO.setGroupProvisioningManager(gProvisioningManager.getClass().getName());
+                PLATFORM_INFO.setAnyObjectProvisioningManager(AopUtils.getTargetClass(aProvisioningManager).getName());
+                PLATFORM_INFO.setUserProvisioningManager(AopUtils.getTargetClass(uProvisioningManager).getName());
+                PLATFORM_INFO.setGroupProvisioningManager(AopUtils.getTargetClass(gProvisioningManager).getName());
                 PLATFORM_INFO.setVirAttrCache(virAttrCache.getClass().getName());
                 PLATFORM_INFO.setPasswordGenerator(passwordGenerator.getClass().getName());
 


[4/7] syncope git commit: Fix doc link

Posted by il...@apache.org.
Fix doc link


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

Branch: refs/heads/master
Commit: 6b6f36c8b39260fb2aaed1ccb5a86ec5863e7185
Parents: f719325
Author: Francesco Chicchiricc� <il...@apache.org>
Authored: Tue Apr 18 10:15:07 2017 +0200
Committer: Francesco Chicchiricc� <il...@apache.org>
Committed: Tue Apr 18 10:42:45 2017 +0200

----------------------------------------------------------------------
 .../systemadministration/configurationparameters.adoc              | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/6b6f36c8/src/main/asciidoc/reference-guide/workingwithapachesyncope/systemadministration/configurationparameters.adoc
----------------------------------------------------------------------
diff --git a/src/main/asciidoc/reference-guide/workingwithapachesyncope/systemadministration/configurationparameters.adoc b/src/main/asciidoc/reference-guide/workingwithapachesyncope/systemadministration/configurationparameters.adoc
index fa70c8d..d8246f1 100644
--- a/src/main/asciidoc/reference-guide/workingwithapachesyncope/systemadministration/configurationparameters.adoc
+++ b/src/main/asciidoc/reference-guide/workingwithapachesyncope/systemadministration/configurationparameters.adoc
@@ -43,7 +43,7 @@ processes, including <<password-reset,password reset>>;
 application) is allowed;
 * `passwordReset.securityQuestion` - whether the <<password-reset,password reset>> feature involves security questions;
 * `authentication.attributes` - the list of attributes whose values can be passed as login name for authentication,
-defaults to `username`; please note that the related <<plain,plain schemas> must impose the unique constraint, for this
+defaults to `username`; please note that the related <<plain,plain schemas>> must impose the unique constraint, for this
 mechanism to work properly;
 * `authentication.statuses` - the list of <<workflow,workflow>> statuses for which users are allowed to authenticate;
 [WARNING]


[5/7] syncope git commit: Fixing after BATIK-1185

Posted by il...@apache.org.
Fixing after BATIK-1185


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

Branch: refs/heads/master
Commit: 86446e9fd03f788b4c4beea2f6cec6dcf4146870
Parents: 6b6f36c
Author: Francesco Chicchiricc� <il...@apache.org>
Authored: Tue Apr 18 10:29:09 2017 +0200
Committer: Francesco Chicchiricc� <il...@apache.org>
Committed: Tue Apr 18 10:42:51 2017 +0200

----------------------------------------------------------------------
 core/logic/pom.xml |  8 ++++++++
 pom.xml            | 12 +++++++++++-
 2 files changed, 19 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/86446e9f/core/logic/pom.xml
----------------------------------------------------------------------
diff --git a/core/logic/pom.xml b/core/logic/pom.xml
index 35518bd..70245cf 100644
--- a/core/logic/pom.xml
+++ b/core/logic/pom.xml
@@ -79,6 +79,14 @@ under the License.
       <groupId>org.apache.xmlgraphics</groupId>
       <artifactId>fop</artifactId>
     </dependency>
+    <dependency>
+      <groupId>org.apache.xmlgraphics</groupId>
+      <artifactId>batik-i18n</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.xmlgraphics</groupId>
+      <artifactId>batik-constants</artifactId>
+    </dependency>
 
     <dependency>
       <groupId>org.apache.logging.log4j</groupId>

http://git-wip-us.apache.org/repos/asf/syncope/blob/86446e9f/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 2f8c8a8..532c0d4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -988,7 +988,17 @@ under the License.
           </exclusion>
         </exclusions>
       </dependency>
-            
+      <dependency>
+        <groupId>org.apache.xmlgraphics</groupId>
+        <artifactId>batik-i18n</artifactId>
+        <version>1.9</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.xmlgraphics</groupId>
+        <artifactId>batik-constants</artifactId>
+        <version>1.9</version>
+      </dependency>
+
       <!-- Activiti -->
       <dependency>
         <groupId>org.activiti</groupId>


[6/7] syncope git commit: Fixing AOP class name extraction for Camel components

Posted by il...@apache.org.
Fixing AOP class name extraction for Camel components


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

Branch: refs/heads/master
Commit: 8b8b5d13b67864c0c0a56e8c9f582a1a4571b918
Parents: 86446e9
Author: Francesco Chicchiricc� <il...@apache.org>
Authored: Tue Apr 18 10:32:35 2017 +0200
Committer: Francesco Chicchiricc� <il...@apache.org>
Committed: Tue Apr 18 10:42:57 2017 +0200

----------------------------------------------------------------------
 .../main/java/org/apache/syncope/core/logic/SyncopeLogic.java  | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/8b8b5d13/core/logic/src/main/java/org/apache/syncope/core/logic/SyncopeLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/SyncopeLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/SyncopeLogic.java
index 0caa8ab..0f0dcb4 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/SyncopeLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/SyncopeLogic.java
@@ -170,9 +170,9 @@ public class SyncopeLogic extends AbstractLogic<AbstractBaseBean> {
                 PLATFORM_INFO.setUserWorkflowAdapter(AopUtils.getTargetClass(uwfAdapter).getName());
                 PLATFORM_INFO.setGroupWorkflowAdapter(AopUtils.getTargetClass(gwfAdapter).getName());
 
-                PLATFORM_INFO.setAnyObjectProvisioningManager(aProvisioningManager.getClass().getName());
-                PLATFORM_INFO.setUserProvisioningManager(uProvisioningManager.getClass().getName());
-                PLATFORM_INFO.setGroupProvisioningManager(gProvisioningManager.getClass().getName());
+                PLATFORM_INFO.setAnyObjectProvisioningManager(AopUtils.getTargetClass(aProvisioningManager).getName());
+                PLATFORM_INFO.setUserProvisioningManager(AopUtils.getTargetClass(uProvisioningManager).getName());
+                PLATFORM_INFO.setGroupProvisioningManager(AopUtils.getTargetClass(gProvisioningManager).getName());
                 PLATFORM_INFO.setVirAttrCache(virAttrCache.getClass().getName());
                 PLATFORM_INFO.setPasswordGenerator(passwordGenerator.getClass().getName());
 


[7/7] syncope git commit: [SYNCOPE-1066] Avoid invoking REST via HTTP to fetch the generated WADL; rather getting it via Spring bean

Posted by il...@apache.org.
[SYNCOPE-1066] Avoid invoking REST via HTTP to fetch the generated WADL; rather getting it via Spring bean


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

Branch: refs/heads/master
Commit: aa36e2ab5f5e9a14cca5f851588de01c190ce2ff
Parents: 8b8b5d1
Author: Francesco Chicchiricc� <il...@apache.org>
Authored: Tue Apr 18 10:41:41 2017 +0200
Committer: Francesco Chicchiricc� <il...@apache.org>
Committed: Tue Apr 18 10:43:01 2017 +0200

----------------------------------------------------------------------
 .../syncope/core/rest/cxf/WADLServlet.java      | 13 ++--
 .../syncope/core/rest/cxf/WadlGenerator.java    | 74 +++++++++++++++++++-
 .../src/main/resources/log4j2.xml               |  4 ++
 3 files changed, 83 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/aa36e2ab/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/WADLServlet.java
----------------------------------------------------------------------
diff --git a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/WADLServlet.java b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/WADLServlet.java
index 534ae9f..e421909 100644
--- a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/WADLServlet.java
+++ b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/WADLServlet.java
@@ -18,10 +18,10 @@
  */
 package org.apache.syncope.core.rest.cxf;
 
+import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
-import java.net.URL;
 import java.rmi.ServerException;
 import java.util.HashMap;
 import java.util.Map;
@@ -39,7 +39,7 @@ import org.apache.cocoon.sax.component.XMLGenerator;
 import org.apache.cocoon.sax.component.XMLSerializer;
 import org.apache.cocoon.sax.component.XSLTTransformer;
 import org.apache.commons.io.IOUtils;
-import org.apache.commons.lang3.StringUtils;
+import org.apache.syncope.core.spring.ApplicationContextProvider;
 
 public class WADLServlet extends HttpServlet {
 
@@ -73,10 +73,11 @@ public class WADLServlet extends HttpServlet {
 
         Matcher schemaMatcher = SCHEMA_PATTERN.matcher(request.getServletPath());
 
+        WadlGenerator wadlGenerator = ApplicationContextProvider.getApplicationContext().getBean(WadlGenerator.class);
+        String wadl = wadlGenerator.getWadl();
+
         Pipeline<SAXPipelineComponent> pipeline = new CachingPipeline<>();
-        String wadlURL = StringUtils.substringBeforeLast(request.getRequestURL().toString(), "/")
-                + "/rest/?_wadl";
-        pipeline.addComponent(new XMLGenerator(new URL(wadlURL)));
+        pipeline.addComponent(new XMLGenerator(wadl));
         if ("/index.html".equals(request.getServletPath())) {
             XSLTTransformer xslt = new XSLTTransformer(getClass().getResource("/wadl2html/index.xsl"));
 
@@ -102,7 +103,7 @@ public class WADLServlet extends HttpServlet {
         } else if ("/syncope.wadl".equals(request.getServletPath())) {
             response.setContentType(MediaType.APPLICATION_XML);
 
-            InputStream in = new URL(wadlURL).openStream();
+            InputStream in = new ByteArrayInputStream(wadl.getBytes());
             OutputStream out = response.getOutputStream();
             try {
                 IOUtils.copy(in, out);

http://git-wip-us.apache.org/repos/asf/syncope/blob/aa36e2ab/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/WadlGenerator.java
----------------------------------------------------------------------
diff --git a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/WadlGenerator.java b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/WadlGenerator.java
index 444e58e..8595293 100644
--- a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/WadlGenerator.java
+++ b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/WadlGenerator.java
@@ -18,8 +18,21 @@
  */
 package org.apache.syncope.core.rest.cxf;
 
+import java.lang.annotation.Annotation;
 import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+import javax.ws.rs.Path;
 import javax.ws.rs.container.ContainerRequestContext;
+import org.apache.commons.collections4.IterableUtils;
+import org.apache.commons.collections4.Predicate;
+import org.apache.cxf.BusFactory;
+import org.apache.cxf.common.util.ClasspathScanner;
+import org.apache.cxf.jaxrs.model.ClassResourceInfo;
+import org.apache.cxf.jaxrs.utils.InjectionUtils;
+import org.apache.cxf.jaxrs.utils.ResourceUtils;
 
 /**
  * Automatically loads available javadocs from class loader (when {@link java.net.URLClassLoader}).
@@ -28,8 +41,9 @@ public class WadlGenerator extends org.apache.cxf.jaxrs.model.wadl.WadlGenerator
 
     private boolean inited = false;
 
-    @Override
-    public void filter(final ContainerRequestContext context) {
+    private String wadl = null;
+
+    private void init() {
         synchronized (this) {
             if (!inited) {
                 URL[] javaDocURLs = JavaDocUtils.getJavaDocURLs();
@@ -40,8 +54,64 @@ public class WadlGenerator extends org.apache.cxf.jaxrs.model.wadl.WadlGenerator
                 inited = true;
             }
         }
+    }
 
+    @Override
+    public void filter(final ContainerRequestContext context) {
+        init();
         super.filter(context);
     }
 
+    public String getWadl() {
+        synchronized (this) {
+            if (wadl == null) {
+                init();
+
+                List<Class<?>> resourceClasses = new ArrayList<>();
+                try {
+                    List<Class<? extends Annotation>> anns = new ArrayList<>();
+                    anns.add(Path.class);
+                    Map<Class<? extends Annotation>, Collection<Class<?>>> discoveredClasses =
+                            ClasspathScanner.findClasses(ClasspathScanner.parsePackages(
+                                    "org.apache.syncope.common.rest.api.service"),
+                                    anns);
+                    if (discoveredClasses.containsKey(Path.class)) {
+                        resourceClasses.addAll(discoveredClasses.get(Path.class));
+                    }
+                } catch (Exception e) {
+                    // ignore
+                }
+
+                List<ClassResourceInfo> classResourceInfos = new ArrayList<>();
+                for (final Class<?> beanClass : resourceClasses) {
+                    ClassResourceInfo cri = IterableUtils.find(classResourceInfos, new Predicate<ClassResourceInfo>() {
+
+                        @Override
+                        public boolean evaluate(final ClassResourceInfo cri) {
+                            return cri.isCreatedFromModel() && cri.isRoot()
+                                    && cri.getServiceClass().isAssignableFrom(beanClass);
+                        }
+                    });
+                    if (cri != null) {
+                        if (!InjectionUtils.isConcreteClass(cri.getServiceClass())) {
+                            cri = new ClassResourceInfo(cri);
+                            classResourceInfos.add(cri);
+                        }
+                        cri.setResourceClass(beanClass);
+                        continue;
+                    }
+
+                    cri = ResourceUtils.createClassResourceInfo(
+                            beanClass, beanClass, true, true, BusFactory.getDefaultBus());
+                    if (cri != null) {
+                        classResourceInfos.add(cri);
+                    }
+                }
+
+                wadl = generateWADL("/", classResourceInfos, false, null, null).toString();
+            }
+        }
+
+        return wadl;
+    }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/aa36e2ab/fit/core-reference/src/main/resources/log4j2.xml
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/main/resources/log4j2.xml b/fit/core-reference/src/main/resources/log4j2.xml
index bc4771c..19f5cc4 100644
--- a/fit/core-reference/src/main/resources/log4j2.xml
+++ b/fit/core-reference/src/main/resources/log4j2.xml
@@ -144,6 +144,10 @@ under the License.
       <appender-ref ref="mainFile"/>
       <appender-ref ref="main"/>
     </asyncLogger>
+    <asyncLogger name="org.apache.cocoon" additivity="false" level="ERROR">
+      <appender-ref ref="mainFile"/>
+      <appender-ref ref="main"/>
+    </asyncLogger>
     <asyncLogger name="org.apache.camel" additivity="false" level="ERROR">
       <appender-ref ref="mainFile"/>
       <appender-ref ref="main"/>