[OLINGO-929] Fix for deferred link in update
diff --git a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/ODataEntityParser.java b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/ODataEntityParser.java
index a6ec241..9977219 100644
--- a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/ODataEntityParser.java
+++ b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/ODataEntityParser.java
@@ -115,9 +115,9 @@
final String serviceRoot = odataContext.getPathInfo().getServiceRoot().toString();
final String path =
uriString.startsWith(serviceRoot.toString()) ? uriString.substring(serviceRoot.length()) : uriString;
- final PathSegment pathSegment = getPathSegment(path);
+ final List<PathSegment> pathSegment = getPathSegment(path);
edm = getEdm();
- uri = UriParser.parse(edm, Arrays.asList(pathSegment), Collections.<String, String> emptyMap());
+ uri = UriParser.parse(edm, pathSegment, Collections.<String, String> emptyMap());
} catch (ODataException e) {
throw ODataJPARuntimeException.throwException(ODataJPARuntimeException.GENERAL.addContent(e.getMessage()), e);
}
@@ -128,8 +128,8 @@
throws ODataJPARuntimeException {
List<PathSegment> pathSegments = new ArrayList<PathSegment>();
for (String link : linkSegments) {
- PathSegment pathSegment = getPathSegment(link);
- pathSegments.add(pathSegment);
+ List<PathSegment> pathSegment = getPathSegment(link);
+ pathSegments.addAll(pathSegment);
}
UriInfo uriInfo = null;
try {
@@ -143,11 +143,11 @@
public UriInfo parseBindingLink(final String link, final Map<String, String> options)
throws ODataJPARuntimeException {
- final PathSegment pathSegment = getPathSegment(link);
+ final List<PathSegment> pathSegment = getPathSegment(link);
UriInfo uriInfo = null;
try {
edm = getEdm();
- uriInfo = UriParser.parse(edm, Arrays.asList(pathSegment), options);
+ uriInfo = UriParser.parse(edm, pathSegment, options);
} catch (ODataException e) {
throw ODataJPARuntimeException.throwException(ODataJPARuntimeException.GENERAL.addContent(e.getMessage()), e);
}
@@ -161,19 +161,26 @@
return edm;
}
- private PathSegment getPathSegment(final String path) {
- final PathSegment pathSegment = new PathSegment() {
+ private List<PathSegment> getPathSegment(final String path) {
+ String trimmedPath = path.replace(serviceRoot, "");
- @Override
- public String getPath() {
- return path.replace(serviceRoot, "");
- }
+ final String[] splittedPath = trimmedPath.split("/");
+ final List<PathSegment> pathSegments = new ArrayList<PathSegment>();
- @Override
- public Map<String, List<String>> getMatrixParameters() {
- return null;
- }
- };
- return pathSegment;
+ for (final String pathSegmentString : splittedPath) {
+ final PathSegment pathSegment = new PathSegment() {
+ @Override
+ public String getPath() {
+ return pathSegmentString;
+ }
+ @Override
+ public Map<String, List<String>> getMatrixParameters() {
+ return null;
+ }
+ };
+ pathSegments.add(pathSegment);
+ }
+
+ return pathSegments;
}
}