Repository: olingo-odata2 Updated Branches: refs/heads/master 0a70933b5 -> 10d21f4f0
[OLINGO-582] Improved failure handling for class helper Project: http://git-wip-us.apache.org/repos/asf/olingo-odata2/repo Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata2/commit/10d21f4f Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata2/tree/10d21f4f Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata2/diff/10d21f4f Branch: refs/heads/master Commit: 10d21f4f00cd6d52d7b363b83a5a08e4e7f655b2 Parents: 0a70933 Author: mibo <[email protected]> Authored: Fri Oct 16 19:20:20 2015 +0200 Committer: mibo <[email protected]> Committed: Fri Oct 16 19:45:21 2015 +0200 ---------------------------------------------------------------------- .../processor/core/util/ClassHelper.java | 11 +++++++---- .../processor/core/util/ClassHelperTest.java | 17 +++++++++++++++++ 2 files changed, 24 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/10d21f4f/odata2-annotation-processor/annotation-processor-core/src/main/java/org/apache/olingo/odata2/annotation/processor/core/util/ClassHelper.java ---------------------------------------------------------------------- diff --git a/odata2-annotation-processor/annotation-processor-core/src/main/java/org/apache/olingo/odata2/annotation/processor/core/util/ClassHelper.java b/odata2-annotation-processor/annotation-processor-core/src/main/java/org/apache/olingo/odata2/annotation/processor/core/util/ClassHelper.java index a5e9eb9..6a0dc3e 100644 --- a/odata2-annotation-processor/annotation-processor-core/src/main/java/org/apache/olingo/odata2/annotation/processor/core/util/ClassHelper.java +++ b/odata2-annotation-processor/annotation-processor-core/src/main/java/org/apache/olingo/odata2/annotation/processor/core/util/ClassHelper.java @@ -24,6 +24,7 @@ import java.io.FilenameFilter; import java.io.IOException; import java.lang.reflect.Field; import java.lang.reflect.ParameterizedType; +import java.net.MalformedURLException; import java.net.URI; import java.net.URISyntaxException; import java.net.URL; @@ -109,14 +110,16 @@ public class ClassHelper { throw new IllegalArgumentException("No folder to scan found for package '" + packageToScan + "'."); } try { - URI uri = url.toURI(); - if (uri == null) { - throw new IllegalArgumentException("No folder to scan found for package '" + packageToScan + "'."); + if(url.getPath().contains(" ")) { + url = new URL(url.getProtocol(), url.getHost(), url.getPort(), url.getPath().replace(" ", "%20")); } - return uri; + return url.toURI(); } catch (URISyntaxException e) { throw new IllegalArgumentException("Invalid folder path for path URL '" + url + "' from thread context class loader."); + } catch (MalformedURLException e) { + throw new IllegalArgumentException("Invalid folder path for path URL '" + url + + "' from thread context class loader."); } } http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/10d21f4f/odata2-annotation-processor/annotation-processor-core/src/test/java/org/apache/olingo/odata2/annotation/processor/core/util/ClassHelperTest.java ---------------------------------------------------------------------- diff --git a/odata2-annotation-processor/annotation-processor-core/src/test/java/org/apache/olingo/odata2/annotation/processor/core/util/ClassHelperTest.java b/odata2-annotation-processor/annotation-processor-core/src/test/java/org/apache/olingo/odata2/annotation/processor/core/util/ClassHelperTest.java index bcd955a..3ffba61 100644 --- a/odata2-annotation-processor/annotation-processor-core/src/test/java/org/apache/olingo/odata2/annotation/processor/core/util/ClassHelperTest.java +++ b/odata2-annotation-processor/annotation-processor-core/src/test/java/org/apache/olingo/odata2/annotation/processor/core/util/ClassHelperTest.java @@ -78,6 +78,23 @@ public class ClassHelperTest { Assert.assertEquals(SimpleEntity.class.getName(), loadedClasses.get(0).getName()); } + @Test(expected = ClassFormatError.class) + public void loadFromDirWithUnsafeName() throws Exception { + URL currentPath = Thread.currentThread().getContextClassLoader().getResource("."); + File folder = new File(currentPath.toURI().getSchemeSpecificPart(), "space space/package (123)/"); + folder.mkdirs(); + File classFile = new File(folder, "Invalid.class"); + classFile.createNewFile(); + String packageToScan = "space space.package"; + + // + List<Class<?>> loadedClasses = ClassHelper.loadClasses(packageToScan, annotatedTestEntityInnerClasses); + + // + Assert.assertEquals(1, loadedClasses.size()); + Assert.assertEquals(SimpleEntity.class.getName(), loadedClasses.get(0).getName()); + } + @Test public void loadSingleEntityFromJar() throws ODataException { String packageToScan = AnnotatedEntity.class.getPackage().getName();
