aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJon Marius Venstad <venstad@gmail.com>2020-10-20 11:06:20 +0200
committerJon Marius Venstad <venstad@gmail.com>2020-10-20 11:06:20 +0200
commitc5e30c1a7e2039bed0da6c10e1a4216b5b165ae9 (patch)
treeaada2c2bc682db4771cb1f914dc76abcaa069166
parente698e639b67d89f374c7457d87c05012a242de75 (diff)
Accept non-URL-encoded doc ids as last part of doc/v1 URL щ(ಥДಥщ)
-rw-r--r--vespaclient-container-plugin/src/main/java/com/yahoo/document/restapi/resource/DocumentV1ApiHandler.java8
-rw-r--r--vespaclient-container-plugin/src/test/java/com/yahoo/document/restapi/resource/DocumentV1ApiTest.java20
-rw-r--r--vespajlib/src/main/java/com/yahoo/io/BufferChain.java2
3 files changed, 19 insertions, 11 deletions
diff --git a/vespaclient-container-plugin/src/main/java/com/yahoo/document/restapi/resource/DocumentV1ApiHandler.java b/vespaclient-container-plugin/src/main/java/com/yahoo/document/restapi/resource/DocumentV1ApiHandler.java
index bb9ffe6b20f..13ca774dc33 100644
--- a/vespaclient-container-plugin/src/main/java/com/yahoo/document/restapi/resource/DocumentV1ApiHandler.java
+++ b/vespaclient-container-plugin/src/main/java/com/yahoo/document/restapi/resource/DocumentV1ApiHandler.java
@@ -278,19 +278,19 @@ public class DocumentV1ApiHandler extends AbstractRequestHandler {
handlers.put("/document/v1/{namespace}/{documentType}/number/{number}/",
Map.of(GET, this::getDocuments));
- handlers.put("/document/v1/{namespace}/{documentType}/docid/{docid}",
+ handlers.put("/document/v1/{namespace}/{documentType}/docid/{*}",
Map.of(GET, this::getDocument,
POST, this::postDocument,
PUT, this::putDocument,
DELETE, this::deleteDocument));
- handlers.put("/document/v1/{namespace}/{documentType}/group/{group}/{docid}",
+ handlers.put("/document/v1/{namespace}/{documentType}/group/{group}/{*}",
Map.of(GET, this::getDocument,
POST, this::postDocument,
PUT, this::putDocument,
DELETE, this::deleteDocument));
- handlers.put("/document/v1/{namespace}/{documentType}/number/{number}/{docid}",
+ handlers.put("/document/v1/{namespace}/{documentType}/number/{number}/{*}",
Map.of(GET, this::getDocument,
POST, this::postDocument,
PUT, this::putDocument,
@@ -982,7 +982,7 @@ public class DocumentV1ApiHandler extends AbstractRequestHandler {
return new DocumentId("id:" + requireNonNull(path.get("namespace")) +
":" + requireNonNull(path.get("documentType")) +
":" + group.map(Group::docIdPart).orElse("") +
- ":" + requireNonNull(path.get("docid")));
+ ":" + requireNonNull(path.getRest()));
}
String rawPath() { return path.asString(); }
diff --git a/vespaclient-container-plugin/src/test/java/com/yahoo/document/restapi/resource/DocumentV1ApiTest.java b/vespaclient-container-plugin/src/test/java/com/yahoo/document/restapi/resource/DocumentV1ApiTest.java
index ef5dc4a72dd..0295f9fa0dc 100644
--- a/vespaclient-container-plugin/src/test/java/com/yahoo/document/restapi/resource/DocumentV1ApiTest.java
+++ b/vespaclient-container-plugin/src/test/java/com/yahoo/document/restapi/resource/DocumentV1ApiTest.java
@@ -178,9 +178,9 @@ public class DocumentV1ApiTest {
"/document/v1/{namespace}/{documentType}/docid/\\n" +
"/document/v1/{namespace}/{documentType}/group/{group}/\\n" +
"/document/v1/{namespace}/{documentType}/number/{number}/\\n" +
- "/document/v1/{namespace}/{documentType}/docid/{docid}\\n" +
- "/document/v1/{namespace}/{documentType}/group/{group}/{docid}\\n" +
- "/document/v1/{namespace}/{documentType}/number/{number}/{docid}\"" +
+ "/document/v1/{namespace}/{documentType}/docid/{*}\\n" +
+ "/document/v1/{namespace}/{documentType}/group/{group}/{*}\\n" +
+ "/document/v1/{namespace}/{documentType}/number/{number}/{*}\"" +
"}", response.readAll());
assertEquals("application/json; charset=UTF-8", response.getResponse().headers().getFirst("Content-Type"));
assertEquals(404, response.getStatus());
@@ -293,10 +293,18 @@ public class DocumentV1ApiTest {
"}", response.readAll());
assertEquals(200, response.getStatus());
- // GET with not encoded / in user specified part of document id is a 404
- access.session.expect((__, ___) -> { throw new AssertionError("Not supposed to happen"); });
+ // GET with not encoded / in user specified part of document id is perfectly OK ... щ(ಥДಥщ)
+ access.session.expect((id, parameters) -> {
+ assertEquals(new DocumentId("id:space:music::one/two/three"), id);
+ assertEquals(parameters(), parameters);
+ parameters.responseHandler().get().handleResponse(new DocumentResponse(0));
+ return new Result(Result.ResultType.SUCCESS, null);
+ });
response = driver.sendRequest("http://localhost/document/v1/space/music/docid/one/two/three");
- response.readAll(); // Must drain body.
+ assertSameJson("{" +
+ " \"pathId\": \"/document/v1/space/music/docid/one/two/three\"," +
+ " \"id\": \"id:space:music::one/two/three\"" +
+ "}", response.readAll());
assertEquals(404, response.getStatus());
// POST with a document payload is a document put operation.
diff --git a/vespajlib/src/main/java/com/yahoo/io/BufferChain.java b/vespajlib/src/main/java/com/yahoo/io/BufferChain.java
index 076ff0363b2..509fd509711 100644
--- a/vespajlib/src/main/java/com/yahoo/io/BufferChain.java
+++ b/vespajlib/src/main/java/com/yahoo/io/BufferChain.java
@@ -15,7 +15,7 @@ import java.util.List;
/**
* Data store for AbstractByteWriter. Tested in unit tests for ByteWriter.
*
- * @author <a href="mailto:steinar@yahoo-inc.com">Steinar Knutsen</a>
+ * @author Steinar Knutsen
*/
public final class BufferChain {
// refer to the revision history of ByteWriter for more information about