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 <[email protected]> Authored: Wed Jul 31 15:27:14 2013 +0200 Committer: Claus Ibsen <[email protected]> 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);
