From 73d92708f6b3752bff36a4d425f57ae84e5be0a6 Mon Sep 17 00:00:00 2001 From: Stefan Bodewig Date: Mon, 12 Jan 2004 10:15:55 +0000 Subject: [PATCH] A leading slash in a resource name is only required for Class.getResource*, not the corresponding ClassLoader methods. Adding the slash makes the task completely useless. Reported by: , Jack J. Woehr git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@275895 13f79535-47bb-0310-9956-ffa450edef68 --- WHATSNEW | 2 ++ src/etc/testcases/taskdefs/whichresource.xml | 5 +++++ .../tools/ant/taskdefs/WhichResource.java | 18 +++++++++++------- .../tools/ant/taskdefs/WhichResourceTest.java | 5 +++++ 4 files changed, 23 insertions(+), 7 deletions(-) diff --git a/WHATSNEW b/WHATSNEW index c9b4b84b2..b00a06d48 100644 --- a/WHATSNEW +++ b/WHATSNEW @@ -16,6 +16,8 @@ Fixed bugs: * Fix jboss element of ejb task (introduced in ant 1.6.0). +* failed to load classes correctly. + Other changes: -------------- * Translate task logs a debug message specifying the number of files diff --git a/src/etc/testcases/taskdefs/whichresource.xml b/src/etc/testcases/taskdefs/whichresource.xml index eed770b88..b2094bdcb 100644 --- a/src/etc/testcases/taskdefs/whichresource.xml +++ b/src/etc/testcases/taskdefs/whichresource.xml @@ -12,4 +12,9 @@ + + + + \ No newline at end of file diff --git a/src/main/org/apache/tools/ant/taskdefs/WhichResource.java b/src/main/org/apache/tools/ant/taskdefs/WhichResource.java index e8a2fc2b3..aa2714d50 100644 --- a/src/main/org/apache/tools/ant/taskdefs/WhichResource.java +++ b/src/main/org/apache/tools/ant/taskdefs/WhichResource.java @@ -1,7 +1,7 @@ /* * The Apache Software License, Version 1.1 * - * Copyright (c) 2000-2003 The Apache Software Foundation. All rights + * Copyright (c) 2003-2004 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -168,13 +168,17 @@ public class WhichResource extends Task { String location = null; if (classname != null) { //convert a class name into a resource - classname = classname.replace('.', '/'); - resource = "/" + classname + ".class"; - } else { - if (!resource.startsWith("/")) { - resource = "/" + resource; - } + resource = classname.replace('.', '/') + ".class"; + } + + if (resource == null) { + throw new BuildException("One of class or resource is required"); } + + if (resource.startsWith("/")) { + resource = resource.substring(1); + } + log("Searching for " + resource, Project.MSG_VERBOSE); URL url; url = loader.getResource(resource); diff --git a/src/testcases/org/apache/tools/ant/taskdefs/WhichResourceTest.java b/src/testcases/org/apache/tools/ant/taskdefs/WhichResourceTest.java index fbd635251..d2faa454a 100644 --- a/src/testcases/org/apache/tools/ant/taskdefs/WhichResourceTest.java +++ b/src/testcases/org/apache/tools/ant/taskdefs/WhichResourceTest.java @@ -77,4 +77,9 @@ public class WhichResourceTest extends BuildFileTest { executeTarget("testResourcename"); assertNotNull(getProject().getProperty("defaults")); } + + public void testResourcenameWithLeadingSlash() { + executeTarget("testResourcenameWithLeadingSlash"); + assertNotNull(getProject().getProperty("defaults")); + } }