You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@knox.apache.org by kr...@apache.org on 2019/06/07 17:58:19 UTC

[knox] branch master updated: KNOX-1874 - Ignore irrelevant files in service definition directories (#99)

This is an automated email from the ASF dual-hosted git repository.

krisden pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/knox.git


The following commit(s) were added to refs/heads/master by this push:
     new ce85fed  KNOX-1874 - Ignore irrelevant files in service definition directories (#99)
ce85fed is described below

commit ce85fed6451fe9ec8d9c01e7011faee59e839bc5
Author: Todd Lipcon <to...@lipcon.org>
AuthorDate: Fri Jun 7 10:58:15 2019 -0700

    KNOX-1874 - Ignore irrelevant files in service definition directories (#99)
---
 .../gateway/util/ServiceDefinitionsLoader.java     | 51 +++++++++++++---------
 .../services/foo/1.0.0/service.xml.ignored         |  2 +
 2 files changed, 32 insertions(+), 21 deletions(-)

diff --git a/gateway-server/src/main/java/org/apache/knox/gateway/util/ServiceDefinitionsLoader.java b/gateway-server/src/main/java/org/apache/knox/gateway/util/ServiceDefinitionsLoader.java
index c26e654..9944168 100644
--- a/gateway-server/src/main/java/org/apache/knox/gateway/util/ServiceDefinitionsLoader.java
+++ b/gateway-server/src/main/java/org/apache/knox/gateway/util/ServiceDefinitionsLoader.java
@@ -60,27 +60,31 @@ public class ServiceDefinitionsLoader {
     }
   }
 
+  private static Unmarshaller createUnmarshaller() {
+    try {
+      return jaxbContext.createUnmarshaller();
+    } catch (JAXBException e) {
+      throw new RuntimeException("Could not create unmarshaller", e);
+    }
+  }
+
   public static Set<ServiceDeploymentContributor> loadServiceDefinitions(File servicesDir) {
     Set<ServiceDeploymentContributor> contributors = new HashSet<>();
     if ( servicesDir.exists() && servicesDir.isDirectory() ) {
-      try {
-        Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
-
-        for ( File file : getFileList(servicesDir) ) {
-          try (InputStream inputStream = Files.newInputStream(file.toPath())) {
-            ServiceDefinition definition = (ServiceDefinition) unmarshaller.unmarshal(inputStream);
-            //look for rewrite rules as a sibling (for now)
-            UrlRewriteRulesDescriptor rewriteRulesDescriptor = loadRewriteRules(file.getParentFile());
-            contributors.add(new ServiceDefinitionDeploymentContributor(definition, rewriteRulesDescriptor));
-            log.addedServiceDefinition(definition.getName(), definition.getRole(), definition.getVersion());
-          } catch ( FileNotFoundException e ) {
-            log.failedToFindServiceDefinitionFile(file.getAbsolutePath(), e);
-          } catch (IOException e) {
-            log.failedToLoadServiceDefinition(file.getAbsolutePath(), e);
-          }
+      Unmarshaller unmarshaller = createUnmarshaller();
+
+      for ( File file : getFileList(servicesDir) ) {
+        try (InputStream inputStream = Files.newInputStream(file.toPath())) {
+          ServiceDefinition definition = (ServiceDefinition) unmarshaller.unmarshal(inputStream);
+          //look for rewrite rules as a sibling (for now)
+          UrlRewriteRulesDescriptor rewriteRulesDescriptor = loadRewriteRules(file.getParentFile());
+          contributors.add(new ServiceDefinitionDeploymentContributor(definition, rewriteRulesDescriptor));
+          log.addedServiceDefinition(definition.getName(), definition.getRole(), definition.getVersion());
+        } catch (FileNotFoundException e) {
+          log.failedToFindServiceDefinitionFile(file.getAbsolutePath(), e);
+        } catch (IOException | JAXBException e) {
+          log.failedToLoadServiceDefinition(file.getAbsolutePath(), e);
         }
-      } catch ( JAXBException e ) {
-        log.failedToLoadServiceDefinition(SERVICE_FILE_NAME, e);
       }
     }
     return contributors;
@@ -88,9 +92,8 @@ public class ServiceDefinitionsLoader {
 
   public static Set<ServiceDefinition> getServiceDefinitions(File servicesDir) {
     Set<ServiceDefinition> definitions = new HashSet<>();
+    Unmarshaller unmarshaller = createUnmarshaller();
     try {
-      Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
-
       for (File f : getFileList(servicesDir)){
         ServiceDefinition definition = (ServiceDefinition) unmarshaller.unmarshal(f);
         definitions.add( definition );
@@ -109,12 +112,18 @@ public class ServiceDefinitionsLoader {
        files = FileUtils.listFiles(servicesDir, new IOFileFilter() {
         @Override
         public boolean accept(File file) {
-          return file.getName().contains(SERVICE_FILE_NAME);
+          return acceptName(file.getName());
         }
 
         @Override
         public boolean accept(File dir, String name) {
-          return name.contains(SERVICE_FILE_NAME);
+          return acceptName(name);
+        }
+
+        private boolean acceptName(String name) {
+          return name.contains(SERVICE_FILE_NAME) &&
+              !name.startsWith(".") &&
+              name.endsWith(".xml");
         }
       }, TrueFileFilter.INSTANCE);
     } else {
diff --git a/gateway-server/src/test/resources/services/foo/1.0.0/service.xml.ignored b/gateway-server/src/test/resources/services/foo/1.0.0/service.xml.ignored
new file mode 100644
index 0000000..1a46a43
--- /dev/null
+++ b/gateway-server/src/test/resources/services/foo/1.0.0/service.xml.ignored
@@ -0,0 +1,2 @@
+This file should be ignored by ServiceDefinitionsLoader because it doesn't
+have the proper .xml extension.