Repository: olingo-odata2 Updated Branches: refs/heads/master 19ee43581 -> 2e26075a1
[OLINGO-686] Fix comma in string key predicate Project: http://git-wip-us.apache.org/repos/asf/olingo-odata2/repo Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata2/commit/2e26075a Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata2/tree/2e26075a Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata2/diff/2e26075a Branch: refs/heads/master Commit: 2e26075a11973a4bbc8e11f208a372e014e93f1d Parents: 19ee435 Author: Michael Bolz <[email protected]> Authored: Tue Jun 9 06:26:11 2015 +0200 Committer: Michael Bolz <[email protected]> Committed: Tue Jun 9 06:26:11 2015 +0200 ---------------------------------------------------------------------- .../apache/olingo/odata2/core/uri/UriParserImpl.java | 6 ++++-- .../apache/olingo/odata2/core/uri/UriParserTest.java | 12 ++++++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/2e26075a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/UriParserImpl.java ---------------------------------------------------------------------- diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/UriParserImpl.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/UriParserImpl.java index 61f73dc..196375c 100644 --- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/UriParserImpl.java +++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/UriParserImpl.java @@ -79,6 +79,7 @@ public class UriParserImpl extends UriParser { .compile("(?:([^.()]+)\\.)?([^.()]+)(?:\\((.+)\\)|(\\(\\)))?"); private static final Pattern NAVIGATION_SEGMENT_PATTERN = Pattern.compile("([^()]+)(?:\\((.+)\\)|(\\(\\)))?"); private static final Pattern NAMED_VALUE_PATTERN = Pattern.compile("(?:([^=]+)=)?([^=]+)"); + private static final Pattern STRING_KEY_PATTERN = Pattern.compile("'([^']*)'"); private final Edm edm; private final EdmSimpleTypeFacade simpleTypeFacade; @@ -446,8 +447,9 @@ public class UriParserImpl extends UriParser { ArrayList<EdmProperty> parsedKeyProperties = new ArrayList<EdmProperty>(); ArrayList<KeyPredicate> keyPredicates = new ArrayList<KeyPredicate>(); - for (final String key : keyPredicate.split(",", -1)) { - + Matcher keyMatcher = STRING_KEY_PATTERN.matcher(keyPredicate); + String[] keys = keyMatcher.matches() ? new String[]{keyPredicate} : keyPredicate.split(",", -1); + for (final String key : keys) { final Matcher matcher = NAMED_VALUE_PATTERN.matcher(key); if (!matcher.matches()) { throw new UriSyntaxException(UriSyntaxException.INVALIDKEYPREDICATE.addContent(keyPredicate)); http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/2e26075a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/uri/UriParserTest.java ---------------------------------------------------------------------- diff --git a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/uri/UriParserTest.java b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/uri/UriParserTest.java index e628fc3..93002fe 100644 --- a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/uri/UriParserTest.java +++ b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/uri/UriParserTest.java @@ -254,6 +254,18 @@ public class UriParserTest extends BaseTest { } @Test + public void parseEmployeesEntityWithKeyWithComma() throws Exception { + UriInfoImpl result = parse("/Employees('1,2')"); + assertNull(result.getEntityContainer().getName()); + assertEquals("Employees", result.getTargetEntitySet().getName()); + assertEquals(UriType.URI2, result.getUriType()); + + assertEquals(1, result.getKeyPredicates().size()); + assertEquals("1,2", result.getKeyPredicates().get(0).getLiteral()); + assertEquals("EmployeeId", result.getKeyPredicates().get(0).getProperty().getName()); + } + + @Test public void parseEmployeesEntityWithKeyEncoded() throws Exception { UriInfoImpl result = parse("/%45mployees('1')"); assertNull(result.getEntityContainer().getName());
