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:13 UTC
[3/7] syncope git commit: [SYNCOPE-1066] Avoid invoking REST via HTTP
to fetch the generated WADL; rather getting it via Spring bean
[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"/>