Repository: syncope
Updated Branches:
  refs/heads/master 39950ccfc -> 18179de19


[SYNCOPE-738] Temporary workaround: recognize if running in JBoss / Wildfy and 
switch to old DOM parser API


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

Branch: refs/heads/master
Commit: d6c211774586de3f66e6ec3087c8b2f98e0e9a31
Parents: 39950cc
Author: Francesco Chicchiriccò <ilgro...@apache.org>
Authored: Wed Dec 2 17:17:10 2015 +0100
Committer: Francesco Chicchiriccò <ilgro...@apache.org>
Committed: Wed Dec 2 17:21:03 2015 +0100

----------------------------------------------------------------------
 .../core/logic/init/CamelRouteLoader.java       | 73 +++++++++++++++++---
 1 file changed, 65 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/d6c21177/ext/camel/logic/src/main/java/org/apache/syncope/core/logic/init/CamelRouteLoader.java
----------------------------------------------------------------------
diff --git 
a/ext/camel/logic/src/main/java/org/apache/syncope/core/logic/init/CamelRouteLoader.java
 
b/ext/camel/logic/src/main/java/org/apache/syncope/core/logic/init/CamelRouteLoader.java
index 05cf79f..6228346 100644
--- 
a/ext/camel/logic/src/main/java/org/apache/syncope/core/logic/init/CamelRouteLoader.java
+++ 
b/ext/camel/logic/src/main/java/org/apache/syncope/core/logic/init/CamelRouteLoader.java
@@ -21,6 +21,15 @@ package org.apache.syncope.core.logic.init;
 import java.io.StringWriter;
 import java.util.Map;
 import javax.sql.DataSource;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.common.lib.types.AnyTypeKind;
 import org.apache.syncope.common.lib.types.CamelEntitlement;
 import org.apache.syncope.core.misc.EntitlementsHolder;
@@ -34,6 +43,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.io.Resource;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.stereotype.Component;
+import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
@@ -49,6 +59,21 @@ public class CamelRouteLoader implements SyncopeLoader {
 
     private static final Logger LOG = 
LoggerFactory.getLogger(CamelRouteLoader.class);
 
+    private static final boolean IS_JBOSS;
+
+    static {
+        IS_JBOSS = isJBoss();
+    }
+
+    private static boolean isJBoss() {
+        try {
+            Class.forName("org.jboss.vfs.VirtualFile");
+            return true;
+        } catch (Throwable ex) {
+            return false;
+        }
+    }
+
     @javax.annotation.Resource(name = "userRoutes")
     private ResourceWithFallbackLoader userRoutesLoader;
 
@@ -94,6 +119,22 @@ public class CamelRouteLoader implements SyncopeLoader {
         return writer.toString();
     }
 
+    private String nodeToString(final Node content, final TransformerFactory 
tf) {
+        String output = StringUtils.EMPTY;
+
+        try {
+            Transformer transformer = tf.newTransformer();
+            transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, 
"yes");
+            StringWriter writer = new StringWriter();
+            transformer.transform(new DOMSource(content), new 
StreamResult(writer));
+            output = writer.getBuffer().toString();
+        } catch (TransformerException e) {
+            LOG.debug("While serializing route node", e);
+        }
+
+        return output;
+    }
+
     private void loadRoutes(
             final String domain, final DataSource dataSource, final Resource 
resource, final AnyTypeKind anyTypeKind) {
 
@@ -105,17 +146,33 @@ public class CamelRouteLoader implements SyncopeLoader {
 
         if (shouldLoadRoutes) {
             try {
-                DOMImplementationRegistry reg = 
DOMImplementationRegistry.newInstance();
-                DOMImplementationLS domImpl = (DOMImplementationLS) 
reg.getDOMImplementation("LS");
-                LSInput lsinput = domImpl.createLSInput();
-                lsinput.setByteStream(resource.getInputStream());
-
-                LSParser parser = 
domImpl.createLSParser(DOMImplementationLS.MODE_SYNCHRONOUS, null);
+                TransformerFactory tf = null;
+                DOMImplementationLS domImpl = null;
+                NodeList routeNodes;
+                // When https://issues.jboss.org/browse/WFLY-4416 is resolved, 
this is not needed any more
+                if (IS_JBOSS) {
+                    tf = TransformerFactory.newInstance();
+                    DocumentBuilderFactory dbFactory = 
DocumentBuilderFactory.newInstance();
+                    DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
+                    Document doc = dBuilder.parse(resource.getInputStream());
+
+                    routeNodes = 
doc.getDocumentElement().getElementsByTagName("route");
+                } else {
+                    DOMImplementationRegistry reg = 
DOMImplementationRegistry.newInstance();
+                    domImpl = (DOMImplementationLS) 
reg.getDOMImplementation("LS");
+                    LSInput lsinput = domImpl.createLSInput();
+                    lsinput.setByteStream(resource.getInputStream());
+
+                    LSParser parser = 
domImpl.createLSParser(DOMImplementationLS.MODE_SYNCHRONOUS, null);
+
+                    routeNodes = 
parser.parse(lsinput).getDocumentElement().getElementsByTagName("route");
+                }
 
-                NodeList routeNodes = 
parser.parse(lsinput).getDocumentElement().getElementsByTagName("route");
                 for (int s = 0; s < routeNodes.getLength(); s++) {
                     Node routeElement = routeNodes.item(s);
-                    String routeContent = nodeToString(routeNodes.item(s), 
domImpl);
+                    String routeContent = IS_JBOSS
+                            ? nodeToString(routeNodes.item(s), tf)
+                            : nodeToString(routeNodes.item(s), domImpl);
                     String routeId = ((Element) 
routeElement).getAttribute("id");
 
                     jdbcTemplate.update(

Reply via email to