Author: davidb
Date: Wed Jan 15 09:30:20 2014
New Revision: 1558324
URL: http://svn.apache.org/r1558324
Log:
Fix for ARIES-1147
Solution as suggested by John Ross.
Includes new unit tests.
Modified:
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/Location.java
aries/trunk/subsystem/subsystem-core/src/test/java/org/apache/aries/subsystem/core/internal/LocationTest.java
Modified:
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/Location.java
URL:
http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/Location.java?rev=1558324&r1=1558323&r2=1558324&view=diff
==============================================================================
---
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/Location.java
(original)
+++
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/Location.java
Wed Jan 15 09:30:20 2014
@@ -55,9 +55,21 @@ public class Location {
String scheme = locationUri.getScheme();
if (LocationType.SUBSYSTEM.scheme.equals(scheme)) {
type = LocationType.SUBSYSTEM;
- subsystemUri = new SubsystemUri(location);
- url = subsystemUri.getURL(); // subsystem uris may contain a nested
url.
- uri = (url==null) ? null : url.toURI();
+ SubsystemUri ssUri;
+ try {
+ ssUri = new SubsystemUri(location);
+ } catch (Exception ex) {
+ // In some cases the SubsystemUri can't be parsed by the
SubsystemUri parser.
+ ssUri = null;
+ }
+ subsystemUri = ssUri;
+ if (subsystemUri != null) {
+ url = subsystemUri.getURL(); // subsystem uris may contain a nested
url.
+ uri = (url==null) ? null : url.toURI();
+ } else {
+ url = null;
+ uri = locationUri;
+ }
} else if (LocationType.IDIRFINDER.scheme.equals(scheme)) {
type = LocationType.IDIRFINDER;
subsystemUri = null;
@@ -82,11 +94,11 @@ public class Location {
}
public String getSymbolicName() {
- return (type==LocationType.SUBSYSTEM) ? subsystemUri.getSymbolicName() :
null;
+ return (subsystemUri!=null) ? subsystemUri.getSymbolicName() : null;
}
public Version getVersion() {
- return (type==LocationType.SUBSYSTEM) ? subsystemUri.getVersion() : null;
+ return (subsystemUri!=null) ? subsystemUri.getVersion() : null;
}
public IDirectory open() throws IOException, URISyntaxException {
@@ -127,4 +139,4 @@ public class Location {
throw new IOException("cannot find IDirectory corresponding to id " + uri);
}
-}
\ No newline at end of file
+}
Modified:
aries/trunk/subsystem/subsystem-core/src/test/java/org/apache/aries/subsystem/core/internal/LocationTest.java
URL:
http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-core/src/test/java/org/apache/aries/subsystem/core/internal/LocationTest.java?rev=1558324&r1=1558323&r2=1558324&view=diff
==============================================================================
---
aries/trunk/subsystem/subsystem-core/src/test/java/org/apache/aries/subsystem/core/internal/LocationTest.java
(original)
+++
aries/trunk/subsystem/subsystem-core/src/test/java/org/apache/aries/subsystem/core/internal/LocationTest.java
Wed Jan 15 09:30:20 2014
@@ -20,6 +20,7 @@ import static org.junit.Assert.fail;
import java.net.MalformedURLException;
import org.junit.Test;
+import org.osgi.framework.Version;
public class LocationTest {
@Test
@@ -48,4 +49,26 @@ public class LocationTest {
fail("Wrong exception");
}
}
+
+ @Test
+ public void testSubsystemLocation() throws Exception {
+ // In some cases the following location string is generated
+ String locationString =
"subsystem://?Subsystem-SymbolicName=org.osgi.service.subsystem.root&Subsystem-Version=1.2.3";
+
+ Location location = new Location(locationString);
+ assertEquals(locationString, location.getValue());
+ assertEquals("org.osgi.service.subsystem.root",
location.getSymbolicName());
+ assertEquals(Version.parseVersion("1.2.3"), location.getVersion());
+ }
+
+ @Test
+ public void testSubsystemLocationInvalid() throws Exception {
+ // In some cases the following location string is generated
+ String locationString =
"subsystem://?Subsystem-SymbolicName=org.osgi.service.subsystem.root&Subsystem-Version=1.0.0!/[email protected]";
+
+ Location location = new Location(locationString);
+ assertEquals(locationString, location.getValue());
+ assertNull(location.getSymbolicName());
+ assertNull(location.getVersion());
+ }
}