You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2013/07/31 15:27:39 UTC

git commit: Polsihed camel-dozer to support better loading mapping files using file paths

Updated Branches:
  refs/heads/master 4f73ebf7d -> efb95c12b


Polsihed camel-dozer to support better loading mapping files using file paths


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

Branch: refs/heads/master
Commit: efb95c12b672424e43070312d1b18bdd3c18cd10
Parents: 4f73ebf
Author: Claus Ibsen <da...@apache.org>
Authored: Wed Jul 31 15:27:14 2013 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Wed Jul 31 15:27:32 2013 +0200

----------------------------------------------------------------------
 .../org/apache/camel/util/ResourceHelper.java   | 56 +++++++++++++++-----
 .../dozer/DozerTypeConverterLoader.java         | 18 ++++++-
 2 files changed, 58 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/efb95c12/camel-core/src/main/java/org/apache/camel/util/ResourceHelper.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/util/ResourceHelper.java b/camel-core/src/main/java/org/apache/camel/util/ResourceHelper.java
index ccdf0bf..46b7616 100644
--- a/camel-core/src/main/java/org/apache/camel/util/ResourceHelper.java
+++ b/camel-core/src/main/java/org/apache/camel/util/ResourceHelper.java
@@ -83,6 +83,26 @@ public final class ResourceHelper {
      * @throws java.io.IOException is thrown if the resource file could not be found or loaded as {@link InputStream}
      */
     public static InputStream resolveMandatoryResourceAsInputStream(ClassResolver classResolver, String uri) throws IOException {
+        InputStream is = resolveResourceAsInputStream(classResolver, uri);
+        if (is == null) {
+            String resolvedName = resolveUriPath(uri);
+            throw new FileNotFoundException("Cannot find resource: " + resolvedName + " in classpath for URI: " + uri);
+        } else {
+            return is;
+        }
+    }
+
+    /**
+     * Resolves the resource.
+     * <p/>
+     * If possible recommended to use {@link #resolveMandatoryResourceAsUrl(org.apache.camel.spi.ClassResolver, String)}
+     *
+     * @param classResolver the class resolver to load the resource from the classpath
+     * @param uri URI of the resource
+     * @return the resource as an {@link InputStream}. Remember to close this stream after usage. Or <tt>null</tt> if not found.
+     * @throws java.io.IOException is thrown if error loading the resource
+     */
+    public static InputStream resolveResourceAsInputStream(ClassResolver classResolver, String uri) throws IOException {
         if (uri.startsWith("file:")) {
             uri = ObjectHelper.after(uri, "file:");
             LOG.trace("Loading resource: {} from file system", uri);
@@ -109,12 +129,7 @@ public final class ResourceHelper {
         // load from classpath by default
         String resolvedName = resolveUriPath(uri);
         LOG.trace("Loading resource: {} from classpath", resolvedName);
-        InputStream is = classResolver.loadResourceAsStream(resolvedName);
-        if (is == null) {
-            throw new FileNotFoundException("Cannot find resource: " + resolvedName + " in classpath for URI: " + uri);
-        } else {
-            return is;
-        }
+        return classResolver.loadResourceAsStream(resolvedName);
     }
 
     /**
@@ -122,18 +137,36 @@ public final class ResourceHelper {
      *
      * @param classResolver the class resolver to load the resource from the classpath
      * @param uri uri of the resource
-     * @return the resource as an {@link InputStream}.  Remember to close this stream after usage.
+     * @return the resource as an {@link java.net.URL}.
      * @throws java.io.FileNotFoundException is thrown if the resource file could not be found
      * @throws java.net.MalformedURLException if the URI is malformed
      */
     public static URL resolveMandatoryResourceAsUrl(ClassResolver classResolver, String uri) throws FileNotFoundException, MalformedURLException {
+        URL url = resolveResourceAsUrl(classResolver, uri);
+        if (url == null) {
+            String resolvedName = resolveUriPath(uri);
+            throw new FileNotFoundException("Cannot find resource: " + resolvedName + " in classpath for URI: " + uri);
+        } else {
+            return url;
+        }
+    }
+
+    /**
+     * Resolves the resource.
+     *
+     * @param classResolver the class resolver to load the resource from the classpath
+     * @param uri uri of the resource
+     * @return the resource as an {@link java.net.URL}. Or <tt>null</tt> if not found.
+     * @throws java.net.MalformedURLException if the URI is malformed
+     */
+    public static URL resolveResourceAsUrl(ClassResolver classResolver, String uri) throws MalformedURLException {
         if (uri.startsWith("file:")) {
             // check if file exists first
             String name = ObjectHelper.after(uri, "file:");
             LOG.trace("Loading resource: {} from file system", uri);
             File file = new File(name);
             if (!file.exists()) {
-                throw new FileNotFoundException("File " + file + " not found");
+                return null;
             }
             return new URL(uri);
         } else if (uri.startsWith("http:")) {
@@ -146,12 +179,7 @@ public final class ResourceHelper {
         // load from classpath by default
         String resolvedName = resolveUriPath(uri);
         LOG.trace("Loading resource: {} from classpath", resolvedName);
-        URL url = classResolver.loadResourceAsURL(resolvedName);
-        if (url == null) {
-            throw new FileNotFoundException("Cannot find resource: " + resolvedName + " in classpath for URI: " + uri);
-        } else {
-            return url;
-        }
+        return classResolver.loadResourceAsURL(resolvedName);
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/camel/blob/efb95c12/components/camel-dozer/src/main/java/org/apache/camel/converter/dozer/DozerTypeConverterLoader.java
----------------------------------------------------------------------
diff --git a/components/camel-dozer/src/main/java/org/apache/camel/converter/dozer/DozerTypeConverterLoader.java b/components/camel-dozer/src/main/java/org/apache/camel/converter/dozer/DozerTypeConverterLoader.java
index 3312535..f44d5e9 100644
--- a/components/camel-dozer/src/main/java/org/apache/camel/converter/dozer/DozerTypeConverterLoader.java
+++ b/components/camel-dozer/src/main/java/org/apache/camel/converter/dozer/DozerTypeConverterLoader.java
@@ -16,6 +16,7 @@
  */
 package org.apache.camel.converter.dozer;
 
+import java.net.MalformedURLException;
 import java.net.URL;
 import java.util.ArrayList;
 import java.util.Collections;
@@ -28,6 +29,7 @@ import org.apache.camel.CamelContextAware;
 import org.apache.camel.TypeConverter;
 import org.apache.camel.spi.ClassResolver;
 import org.apache.camel.spi.TypeConverterRegistry;
+import org.apache.camel.util.ResourceHelper;
 import org.dozer.DozerBeanMapper;
 import org.dozer.Mapper;
 import org.dozer.classmap.ClassMap;
@@ -105,7 +107,7 @@ public class DozerTypeConverterLoader implements CamelContextAware {
         CamelToDozerClassResolverAdapter adapter = new CamelToDozerClassResolverAdapter(camelContext);
         BeanContainer.getInstance().setClassLoader(adapter);
         
-        Map<String, DozerBeanMapper> mappers = new HashMap<String, DozerBeanMapper>(camelContext.getRegistry().findByTypeWithName(DozerBeanMapper.class));
+        Map<String, DozerBeanMapper> mappers = lookupDozerBeanMappers();
         if (mapper != null) {
             mappers.put("parameter", mapper);
         }
@@ -124,6 +126,13 @@ public class DozerTypeConverterLoader implements CamelContextAware {
         }
     }
 
+    /**
+     * Lookup the dozer {@link DozerBeanMapper} to be used.
+     */
+    protected Map<String, DozerBeanMapper> lookupDozerBeanMappers() {
+        return new HashMap<String, DozerBeanMapper>(camelContext.getRegistry().findByTypeWithName(DozerBeanMapper.class));
+    }
+
     private void registerClassMaps(TypeConverterRegistry registry, DozerBeanMapper dozer, List<ClassMap> all) {
         DozerTypeConverter converter = new DozerTypeConverter(dozer);
         for (ClassMap map : all) {
@@ -197,7 +206,12 @@ public class DozerTypeConverterLoader implements CamelContextAware {
         }
 
         public URL loadResource(String s) {
-            URL url = classResolver.loadResourceAsURL(s);
+            URL url = null;
+            try {
+                url = ResourceHelper.resolveResourceAsUrl(classResolver, s);
+            } catch (MalformedURLException e) {
+                // ignore
+            }
             if (url == null) {
                 // using the classloader of DozerClassLoader as a fallback
                 url = DozerClassLoader.class.getClassLoader().getResource(s);