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");
+               }
+
+       
+    }
 }


Reply via email to