diff --git a/src/main/java/it/inaf/oats/vospace/datamodel/NodeUtils.java b/src/main/java/it/inaf/oats/vospace/datamodel/NodeUtils.java index 0bcf0f13a0fe2d9d6312f38bdcef78c5b9894b54..88deaa24fcc7b40e377ca41849d2d3743a31ab71 100644 --- a/src/main/java/it/inaf/oats/vospace/datamodel/NodeUtils.java +++ b/src/main/java/it/inaf/oats/vospace/datamodel/NodeUtils.java @@ -5,6 +5,8 @@ */ package it.inaf.oats.vospace.datamodel; +import java.net.URI; +import java.net.URISyntaxException; import net.ivoa.xml.vospace.v2.Node; import java.net.URLDecoder; import java.net.URLEncoder; @@ -245,10 +247,16 @@ public class NodeUtils { } public static String getVosPath(Node myNode) { + return getVosPath(myNode.getUri()); + } - String nodeUri = myNode.getUri(); - - return nodeUri.replaceAll("vos://[^/]+", ""); + public static String getVosPath(String nodeUri) { + try { + URI uri = new URI(nodeUri); + return uri.getPath(); + } catch (URISyntaxException ex) { + throw new RuntimeException(ex); + } } } diff --git a/src/test/java/it/inaf/oats/vospace/datamodel/NodeUtilsTest.java b/src/test/java/it/inaf/oats/vospace/datamodel/NodeUtilsTest.java index d68b9912a9565d5c0d88ef94bb679733ffb864f0..5031c05bcf8e4c46b8ac9216b64741449e0c8299 100644 --- a/src/test/java/it/inaf/oats/vospace/datamodel/NodeUtilsTest.java +++ b/src/test/java/it/inaf/oats/vospace/datamodel/NodeUtilsTest.java @@ -271,6 +271,15 @@ public class NodeUtilsTest { assertEquals("/mynode/child1/child2", NodeUtils.getVosPath(node)); } + @Test + public void testGetVosPathSpecialChars() { + + Node node = new DataNode(); + node.setUri("vos://example.com!vospace/mynode/(%20+%20)/child2"); + + assertEquals("/mynode/( + )/child2", NodeUtils.getVosPath(node)); + } + @Test public void testGetParentPath() { assertEquals("/node1/node2", NodeUtils.getParentPath("/node1/node2/node2"));