Author: cschneider Date: Tue Jul 5 08:21:08 2011 New Revision: 1142918 URL: http://svn.apache.org/viewvc?rev=1142918&view=rev Log: KARAF-667 Fix for IllegalArgumentException
Modified: karaf/trunk/features/obr/src/main/java/org/apache/karaf/features/obr/internal/ObrResolver.java karaf/trunk/features/obr/src/test/java/org/apache/karaf/features/obr/internal/ObrResolverTest.java Modified: karaf/trunk/features/obr/src/main/java/org/apache/karaf/features/obr/internal/ObrResolver.java URL: http://svn.apache.org/viewvc/karaf/trunk/features/obr/src/main/java/org/apache/karaf/features/obr/internal/ObrResolver.java?rev=1142918&r1=1142917&r2=1142918&view=diff ============================================================================== --- karaf/trunk/features/obr/src/main/java/org/apache/karaf/features/obr/internal/ObrResolver.java (original) +++ karaf/trunk/features/obr/src/main/java/org/apache/karaf/features/obr/internal/ObrResolver.java Tue Jul 5 08:21:08 2011 @@ -70,16 +70,19 @@ public class ObrResolver implements Reso List<Resource> deploy = new ArrayList<Resource>(); Map<Object, BundleInfo> infos = new HashMap<Object, BundleInfo>(); for (BundleInfo bundleInfo : feature.getBundles()) { + URL url = null; try { - URL url = new URL(bundleInfo.getLocation()); - Resource res = repositoryAdmin.getHelper().createResource(url); - ress.add(res); - infos.put(res, bundleInfo); + url = new URL(bundleInfo.getLocation()); } catch (MalformedURLException e) { Requirement req = parseRequirement(bundleInfo.getLocation()); reqs.add(req); infos.put(req, bundleInfo); } + if (url != null) { + Resource res = repositoryAdmin.getHelper().createResource(url); + ress.add(res); + infos.put(res, bundleInfo); + } } Repository repository = repositoryAdmin.getHelper().repository(ress.toArray(new Resource[ress.size()])); Modified: karaf/trunk/features/obr/src/test/java/org/apache/karaf/features/obr/internal/ObrResolverTest.java URL: http://svn.apache.org/viewvc/karaf/trunk/features/obr/src/test/java/org/apache/karaf/features/obr/internal/ObrResolverTest.java?rev=1142918&r1=1142917&r2=1142918&view=diff ============================================================================== --- karaf/trunk/features/obr/src/test/java/org/apache/karaf/features/obr/internal/ObrResolverTest.java (original) +++ karaf/trunk/features/obr/src/test/java/org/apache/karaf/features/obr/internal/ObrResolverTest.java Tue Jul 5 08:21:08 2011 @@ -16,6 +16,16 @@ */ package org.apache.karaf.features.obr.internal; +import static org.easymock.EasyMock.createMock; +import static org.easymock.EasyMock.expect; +import static org.easymock.EasyMock.replay; +import static org.easymock.EasyMock.verify; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; import java.util.List; import org.apache.felix.bundlerepository.Reason; @@ -32,13 +42,6 @@ import org.easymock.EasyMock; import org.easymock.IAnswer; import org.junit.Test; -import static org.easymock.EasyMock.createMock; -import static org.easymock.EasyMock.expect; -import static org.easymock.EasyMock.replay; -import static org.easymock.EasyMock.verify; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - public class ObrResolverTest { @Test @@ -65,8 +68,8 @@ public class ObrResolverTest { expect(resolver.resolve(Resolver.NO_OPTIONAL_RESOURCES)).andReturn(true); expect(resolver.getAddedResources()).andReturn(new Resource[] { }); expect(resolver.getRequiredResources()).andReturn(new Resource[] { resource }); - expect(resolver.getReason(resource)).andAnswer(new IAnswer() { - public Object answer() throws Throwable { + expect(resolver.getReason(resource)).andAnswer(new IAnswer<Reason[]>() { + public Reason[] answer() throws Throwable { return new Reason[] { new ReasonImpl( resource, captureReq.getValue()) }; } }); @@ -108,13 +111,13 @@ public class ObrResolverTest { expect(resolver.getAddedResources()).andReturn(new Resource[] { }); expect(resolver.getRequiredResources()).andReturn(new Resource[] { resource }); expect(resolver.getOptionalResources()).andReturn(new Resource[] { optionalResource}); - expect(resolver.getReason(resource)).andAnswer(new IAnswer() { - public Object answer() throws Throwable { + expect(resolver.getReason(resource)).andAnswer(new IAnswer<Reason[]>() { + public Reason[] answer() throws Throwable { return new Reason[] { new ReasonImpl( resource, captureReq.getValue()) }; } }); - expect(resolver.getReason(optionalResource)).andAnswer(new IAnswer() { - public Object answer() throws Throwable { + expect(resolver.getReason(optionalResource)).andAnswer(new IAnswer<Reason[]>() { + public Reason[] answer() throws Throwable { return new Reason[] { new ReasonImpl( optionalResource, captureReq.getValue()) }; } }); @@ -130,4 +133,42 @@ public class ObrResolverTest { assertEquals(obrResolver.parseRequirement(requirement).toString(), captureReq.getValue().toString()); verify(admin, resolver, resource); } + + /** + * Test resolving a mvn url when pax url is configured with a repo that contains no protocol like: "test" + * We expect to get a MalFormedUrlException not a IllegalArgumentException as in the issue + * @throws Exception + */ + @Test(expected=MalformedURLException.class) + public void testResolverWithInvalidMvnRepoIssueKaraf667() throws Exception { + final org.apache.karaf.features.internal.model.Feature f = new org.apache.karaf.features.internal.model.Feature("f1", "1.0"); + f.setResolver("obr"); + // Using file instead of mvn: as we do not want to mess with URL handlers + f.getBundle().add(new Bundle("file:org.foo/foo/1.0")); + + final RepositoryAdmin admin = createMock(RepositoryAdmin.class); + final Resolver resolver = createMock(Resolver.class); + final Resource resource = createMock(Resource.class); + final ObrResolver obrResolver = new ObrResolver(); + obrResolver.setRepositoryAdmin(admin); + + expect(admin.getHelper()).andReturn(new DummyDataModelHelper()).anyTimes(); + replay(admin, resolver, resource); + + obrResolver.resolve(f); + } + + /** + * Recreates behaviour of DataModelHelper when an invalid maven url is set for pax url repos + * TODO Remove as soon as DataModelHelper does not throw this exception any more + */ + class DummyDataModelHelper extends DataModelHelperImpl { + + @Override + public Resource createResource(URL bundleUrl) throws IOException { + throw new MalformedURLException("Missing protocol"); + } + + + } }