marklogic / java-client-api

Java client for the MarkLogic enterprise NoSQL database
https://docs.marklogic.com/guide/java
Apache License 2.0
58 stars 72 forks source link

Combined query criteria through Java API produces Invalid parameter: Invalid combined search #248

Closed georgeajit closed 9 years ago

georgeajit commented 9 years ago

Refer to test-complete's TestQueryByExample.java class and test case method : testBug22179 for this error

Here is a sample code snippet from the above method that produces this error.

This is the combinedCriteria String (I removed the additional quotes of Java String):

{"search":{"options":{"constraint":[{"name":"para", "word":{"term-option":["case-insensitive"], "field":{"name":"para"}}},{"name":"id", "value":{"element":{"ns":"", "name":"id"}}}], "return-metrics":false, "debug":true, "return-qtext":false, "transform-results":{"apply":"snippet"}}, "query":{"queries":[{"or-query":{"queries":[{"and-query":{"queries":[{"word-constraint-query":{"text":["Bush"], "constraint-name":"para"}},{"not-query":{"word-constraint-query":{"text":["memex"], "constraint-name":"para"}}}]}},{"and-query":{"queries":[{"value-constraint-query":{"text":["0026"], "constraint-name":"id"}},{"term-query":{"text":["memex"]}}]}}]}}]}}}

StringHandle combinedHandle = new StringHandle(combinedCriteria).withFormat(Format.JSON); RawCombinedQueryDefinition querydef = queryMgr.newRawCombinedQueryDefinition(combinedHandle);

This is the stack error when String output = queryMgr.search(querydef, new StringHandle()).get(); is executed

com.marklogic.client.FailedRequestException: Local message: search failed: Bad Request. Server Message: REST-INVALIDPARAM: (err:FOER0000) Invalid parameter: Invalid combined search REST-INVALIDPARAM: (err:FOER0000) Invalid parameter: Invalid query: XDMP-VALIDATEUNEXPECTED: (err:XQDY0027) validate strict { $q } -- Invalid node: Found search:text but expected (search:constraint-name,search:text*,search:weight?) at /search:search/search:query/search:or-query/search:and-query[1]/search:word-constraint-query/search:text using schema "search.xsd" at com.marklogic.client.impl.JerseyServices$JerseySearchRequest.getResponse(JerseyServices.java:2206) at com.marklogic.client.impl.JerseyServices.search(JerseyServices.java:1986)

Here is the Wire Trace:

Running testBug22179 [DEBUG] wire - >> "HEAD /v1/ping HTTP/1.1[\r][\n]" [DEBUG] wire - >> "Host: localhost:8011[\r][\n]" [DEBUG] wire - >> "Connection: Keep-Alive[\r][\n]" [DEBUG] wire - >> "[\r][\n]" [DEBUG] wire - << "HTTP/1.1 401 Unauthorized[\r][\n]" [DEBUG] wire - << "Server: MarkLogic[\r][\n]" [DEBUG] wire - << "WWW-Authenticate: Digest realm="public", qop="auth", nonce="d29c4f379c5dfb2306cabcd7e00ad830", opaque="24d0d3299e46da97"[\r][\n]" [DEBUG] wire - << "Content-Type: application/json; charset=utf-8[\r][\n]" [DEBUG] wire - << "Connection: Keep-Alive[\r][\n]" [DEBUG] wire - << "Keep-Alive: timeout=5[\r][\n]" [DEBUG] wire - << "[\r][\n]" [DEBUG] wire - >> "HEAD /v1/ping HTTP/1.1[\r][\n]" [DEBUG] wire - >> "Authorization: Digest username="rest-writer",realm="public",nonce="d29c4f379c5dfb2306cabcd7e00ad830",opaque="24d0d3299e46da97",qop=auth,uri="/v1/ping",cnonce="612fa3dd",nc=00000001,response="3d8bad565087e1c88b0899909f31d76b"[\r][\n]" [DEBUG] wire - >> "Host: localhost:8011[\r][\n]" [DEBUG] wire - >> "Connection: Keep-Alive[\r][\n]" [DEBUG] wire - >> "[\r][\n]" [DEBUG] wire - << "HTTP/1.1 204 No Content[\r][\n]" [DEBUG] wire - << "Server: MarkLogic[\r][\n]" [DEBUG] wire - << "Connection: Keep-Alive[\r][\n]" [DEBUG] wire - << "Keep-Alive: timeout=5[\r][\n]" [DEBUG] wire - << "[\r][\n]" [DEBUG] wire - >> "PUT /v1/documents?category=content&uri=/qbe/constraint1.json HTTP/1.1[\r][\n]" [DEBUG] wire - >> "Content-Type: application/json[\r][\n]" [DEBUG] wire - >> "Authorization: Digest username="rest-writer",realm="public",nonce="d29c4f379c5dfb2306cabcd7e00ad830",opaque="24d0d3299e46da97",qop=auth,uri="/v1/documents",cnonce="4d620e5b",nc=00000002,response="0b8e33552e5f240c81b3cab715f0a886"[\r][\n]" [DEBUG] wire - >> "Transfer-Encoding: chunked[\r][\n]" [DEBUG] wire - >> "Host: localhost:8011[\r][\n]" [DEBUG] wire - >> "Connection: Keep-Alive[\r][\n]" [DEBUG] wire - >> "[\r][\n]" [DEBUG] wire - >> "ac[\r][\n]" [DEBUG] wire - >> "{"root":{"title":"Vannevar Bush", "popularity":"5", "id":"0011", "date":"2005-01-01", "price":{"amt":"0.1"}, "p":"Vannevar Bush wrote an article for The Atlantic Monthly"}}" [DEBUG] wire - >> "[\r][\n]" [DEBUG] wire - >> "0[\r][\n]" [DEBUG] wire - >> "[\r][\n]" [DEBUG] wire - << "HTTP/1.1 201 Created[\r][\n]" [DEBUG] wire - << "Location: /v1/documents?uri=/qbe/constraint1.json[\r][\n]" [DEBUG] wire - << "Server: MarkLogic[\r][\n]" [DEBUG] wire - << "Content-Length: 0[\r][\n]" [DEBUG] wire - << "Connection: Keep-Alive[\r][\n]" [DEBUG] wire - << "Keep-Alive: timeout=5[\r][\n]" [DEBUG] wire - << "[\r][\n]" Write /qbe/constraint1.json to database [DEBUG] wire - >> "PUT /v1/documents?category=content&uri=/qbe/constraint2.json HTTP/1.1[\r][\n]" [DEBUG] wire - >> "Content-Type: application/json[\r][\n]" [DEBUG] wire - >> "Authorization: Digest username="rest-writer",realm="public",nonce="d29c4f379c5dfb2306cabcd7e00ad830",opaque="24d0d3299e46da97",qop=auth,uri="/v1/documents",cnonce="b158edb3",nc=00000003,response="407bf948b95356fe10b57675c48ec154"[\r][\n]" [DEBUG] wire - >> "Transfer-Encoding: chunked[\r][\n]" [DEBUG] wire - >> "Host: localhost:8011[\r][\n]" [DEBUG] wire - >> "Connection: Keep-Alive[\r][\n]" [DEBUG] wire - >> "[\r][\n]" [DEBUG] wire - >> "ac[\r][\n]" [DEBUG] wire - >> "{"root":{"title":"The Bush article", "popularity":"4", "id":"0012", "date":"2006-02-02", "price":{"amt":"0.12"}, "p":"The Bush article described a device called a Memex."}}" [DEBUG] wire - >> "[\r][\n]" [DEBUG] wire - >> "0[\r][\n]" [DEBUG] wire - >> "[\r][\n]" [DEBUG] wire - << "HTTP/1.1 201 Created[\r][\n]" [DEBUG] wire - << "Location: /v1/documents?uri=/qbe/constraint2.json[\r][\n]" [DEBUG] wire - << "Server: MarkLogic[\r][\n]" [DEBUG] wire - << "Content-Length: 0[\r][\n]" [DEBUG] wire - << "Connection: Keep-Alive[\r][\n]" [DEBUG] wire - << "Keep-Alive: timeout=5[\r][\n]" [DEBUG] wire - << "[\r][\n]" Write /qbe/constraint2.json to database [DEBUG] wire - >> "PUT /v1/documents?category=content&uri=/qbe/constraint3.json HTTP/1.1[\r][\n]" [DEBUG] wire - >> "Content-Type: application/json[\r][\n]" [DEBUG] wire - >> "Authorization: Digest username="rest-writer",realm="public",nonce="d29c4f379c5dfb2306cabcd7e00ad830",opaque="24d0d3299e46da97",qop=auth,uri="/v1/documents",cnonce="92668cb5",nc=00000004,response="63e4e30f74bb0460ec109183028a0e13"[\r][\n]" [DEBUG] wire - >> "Transfer-Encoding: chunked[\r][\n]" [DEBUG] wire - >> "Host: localhost:8011[\r][\n]" [DEBUG] wire - >> "Connection: Keep-Alive[\r][\n]" [DEBUG] wire - >> "[\r][\n]" [DEBUG] wire - >> "be[\r][\n]" [DEBUG] wire - >> "{"root":{"title":"For 1945", "popularity":"3", "id":"0113", "date":"2007-03-03", "price":{"amt":"1.23"}, "p":"For 1945, the thoughts expressed in The Atlantic Monthly were groundbreaking."}}" [DEBUG] wire - >> "[\r][\n]" [DEBUG] wire - >> "0[\r][\n]" [DEBUG] wire - >> "[\r][\n]" [DEBUG] wire - << "HTTP/1.1 201 Created[\r][\n]" [DEBUG] wire - << "Location: /v1/documents?uri=/qbe/constraint3.json[\r][\n]" [DEBUG] wire - << "Server: MarkLogic[\r][\n]" [DEBUG] wire - << "Content-Length: 0[\r][\n]" [DEBUG] wire - << "Connection: Keep-Alive[\r][\n]" [DEBUG] wire - << "Keep-Alive: timeout=5[\r][\n]" [DEBUG] wire - << "[\r][\n]" Write /qbe/constraint3.json to database [DEBUG] wire - >> "PUT /v1/documents?category=content&uri=/qbe/constraint4.json HTTP/1.1[\r][\n]" [DEBUG] wire - >> "Content-Type: application/json[\r][\n]" [DEBUG] wire - >> "Authorization: Digest username="rest-writer",realm="public",nonce="d29c4f379c5dfb2306cabcd7e00ad830",opaque="24d0d3299e46da97",qop=auth,uri="/v1/documents",cnonce="a75586eb",nc=00000005,response="a99ccab6889af7582898df6f1bbde0e0"[\r][\n]" [DEBUG] wire - >> "Transfer-Encoding: chunked[\r][\n]" [DEBUG] wire - >> "Host: localhost:8011[\r][\n]" [DEBUG] wire - >> "Connection: Keep-Alive[\r][\n]" [DEBUG] wire - >> "[\r][\n]" [DEBUG] wire - >> "bc[\r][\n]" [DEBUG] wire - >> "{"root":{"title":"Vannevar served", "popularity":"5", "id":"0024", "date":"2008-04-04", "price":{"amt":"12.34"}, "p":"Vannevar served as a prominent policymaker and public intellectual."}}" [DEBUG] wire - >> "[\r][\n]" [DEBUG] wire - >> "0[\r][\n]" [DEBUG] wire - >> "[\r][\n]" [DEBUG] wire - << "HTTP/1.1 201 Created[\r][\n]" [DEBUG] wire - << "Location: /v1/documents?uri=/qbe/constraint4.json[\r][\n]" [DEBUG] wire - << "Server: MarkLogic[\r][\n]" [DEBUG] wire - << "Content-Length: 0[\r][\n]" [DEBUG] wire - << "Connection: Keep-Alive[\r][\n]" [DEBUG] wire - << "Keep-Alive: timeout=5[\r][\n]" [DEBUG] wire - << "[\r][\n]" Write /qbe/constraint4.json to database [DEBUG] wire - >> "PUT /v1/documents?category=content&uri=/qbe/constraint5.json HTTP/1.1[\r][\n]" [DEBUG] wire - >> "Content-Type: application/json[\r][\n]" [DEBUG] wire - >> "Authorization: Digest username="rest-writer",realm="public",nonce="d29c4f379c5dfb2306cabcd7e00ad830",opaque="24d0d3299e46da97",qop=auth,uri="/v1/documents",cnonce="6d89deef",nc=00000006,response="92db18e7beacb17d95740554408eac5d"[\r][\n]" [DEBUG] wire - >> "Transfer-Encoding: chunked[\r][\n]" [DEBUG] wire - >> "Host: localhost:8011[\r][\n]" [DEBUG] wire - >> "Connection: Keep-Alive[\r][\n]" [DEBUG] wire - >> "[\r][\n]" [DEBUG] wire - >> "ae[\r][\n]" [DEBUG] wire - >> "{"root":{"title":"The memex", "popularity":"5", "id":"0026", "date":"2009-05-05", "price":{"amt":"123.45"}, "p":"The Memex, unfortunately, had no automated search feature."}}" [DEBUG] wire - >> "[\r][\n]" [DEBUG] wire - >> "0[\r][\n]" [DEBUG] wire - >> "[\r][\n]" [DEBUG] wire - << "HTTP/1.1 201 Created[\r][\n]" [DEBUG] wire - << "Location: /v1/documents?uri=/qbe/constraint5.json[\r][\n]" [DEBUG] wire - << "Server: MarkLogic[\r][\n]" [DEBUG] wire - << "Content-Length: 0[\r][\n]" [DEBUG] wire - << "Connection: Keep-Alive[\r][\n]" [DEBUG] wire - << "Keep-Alive: timeout=5[\r][\n]" [DEBUG] wire - << "[\r][\n]" Write /qbe/constraint5.json to database [DEBUG] wire - >> "POST /v1/search HTTP/1.1[\r][\n]" [DEBUG] wire - >> "Content-Type: application/json[\r][\n]" [DEBUG] wire - >> "Accept: application/xml[\r][\n]" [DEBUG] wire - >> "Authorization: Digest username="rest-writer",realm="public",nonce="d29c4f379c5dfb2306cabcd7e00ad830",opaque="24d0d3299e46da97",qop=auth,uri="/v1/search",cnonce="72489f3a",nc=00000007,response="c4f8ea068983792211d6968a7ce0ad06"[\r][\n]" [DEBUG] wire - >> "Transfer-Encoding: chunked[\r][\n]" [DEBUG] wire - >> "Host: localhost:8011[\r][\n]" [DEBUG] wire - >> "Connection: Keep-Alive[\r][\n]" [DEBUG] wire - >> "[\r][\n]" [DEBUG] wire - >> "288[\r][\n]" [DEBUG] wire - >> "{"search":{"options":{"constraint":[{"name":"para", "word":{"term-option":["case-insensitive"], "field":{"name":"para"}}},{"name":"id", "value":{"element":{"ns":"", "name":"id"}}}], "return-metrics":false, "debug":true, "return-qtext":false, "transform-results":{"apply":"snippet"}}, "query":{"queries":[{"or-query":{"queries":[{"and-query":{"queries":[{"word-constraint-query":{"text":["Bush"], "constraint-name":"para"}},{"not-query":{"word-constraint-query":{"text":["memex"], "constraint-name":"para"}}}]}},{"and-query":{"queries":[{"value-constraint-query":{"text":["0026"], "constraint-name":"id"}},{"term-query":{"text":["memex"]}}]}}]}}]}}}" [DEBUG] wire - >> "[\r][\n]" [DEBUG] wire - >> "0[\r][\n]" [DEBUG] wire - >> "[\r][\n]" [DEBUG] wire - << "HTTP/1.1 400 Bad Request[\r][\n]" [DEBUG] wire - << "Content-type: application/xml; charset=UTF-8[\r][\n]" [DEBUG] wire - << "Server: MarkLogic[\r][\n]" [DEBUG] wire - << "Content-Length: 652[\r][\n]" [DEBUG] wire - << "Connection: Keep-Alive[\r][\n]" [DEBUG] wire - << "Keep-Alive: timeout=5[\r][\n]" [DEBUG] wire - << "[\r][\n]" [DEBUG] wire - << "[\n]" [DEBUG] wire - << " 400[\n]" [DEBUG] wire - << " Bad Request[\n]" [DEBUG] wire - << " REST-INVALIDPARAM[\n]" [DEBUG] wire - << " REST-INVALIDPARAM: (err:FOER0000) Invalid parameter: Invalid combined search[\n]" [DEBUG] wire - << "REST-INVALIDPARAM: (err:FOER0000) Invalid parameter: Invalid query: XDMP-VALIDATEUNEXPECTED: (err:XQDY0027) validate strict { $q } -- Invalid node: Found search:text but expected (search:constraint-name,search:text*,search:weight?) at /search:search/search:query/search:or-query/search:and-query[1]/search:word-constraint-query/search:text using schema "search.xsd"[\n]" [DEBUG] wire - << "[\n]"

georgeajit commented 9 years ago

Had REST API QA to test the criteria string and it seemed to work fine through the REST API. But fails in Java API.

sammefford commented 9 years ago

Ajit, I cannot duplicate this issue. What version of ML Server are you running? I get exactly the same response from running the test in eclipse, maven, and curl (straight REST w/out Java). I do have to create the field "para" first or I get an error on that. Here's what I see using curl:

$ curl -i --digest --user admin:admin -H 'Content-Type: application/json' -H 'Accept: application/xml' -d '{"search":{"options":{"constraint":[{"name":"para", "word":{"term-option":["case-insensitive"], "field":{"name":"para"}}},{"name":"id", "value":{"element":{"ns":"", "name":"id"}}}], "return-metrics":false, "debug":true, "return-qtext":false, "transform-results":{"apply":"snippet"}}, "query":{"queries":[{"or-query":{"queries":[{"and-query":{"queries":[{"word-constraint-query":{"text":["Bush"], "constraint-name":"para"}},{"not-query":{"word-constraint-query":{"text":["memex"], "constraint-name":"para"}}}]}},{"and-query":{"queries":[{"value-constraint-query":{"text":["0026"], "constraint-name":"id"}},{"term-query":{"text":["memex"]}}]}}]}}]}}}' -X POST 'http://rh6-intel64-80-qa-dev-1:8000/v1/search'
HTTP/1.1 401 Unauthorized
Server: MarkLogic
WWW-Authenticate: Digest realm="public", qop="auth", nonce="d9519a994708b9a2142d0882c002a6f2", opaque="c2ec02b84243b6dc"
Content-Type: application/xml; charset=utf-8
Content-Length: 178
Connection: Keep-Alive
Keep-Alive: timeout=5

HTTP/1.1 200 OK
Content-type: application/xml; charset=utf-8
Server: MarkLogic
Content-Length: 633
Connection: Keep-Alive
Keep-Alive: timeout=5

<search:response snippet-format="snippet" total="0" start="1" page-length="10" xmlns:search="http://marklogic.com/appservices/search">
  <search:report id="SEARCH-FLWOR">(cts:search(fn:collection(), cts:or-query((cts:and-query((cts:field-word-query("para", "Bush", ("case-insensitive","lang=en"), 1), cts:not-query(cts:field-word-query("para", "memex", ("case-insensitive","lang=en"), 1), 1)), ()), cts:and-query((cts:element-value-query(fn:QName("","id"), "0026", ("lang=en"), 1), cts:word-query("memex", ("lang=en"), 1)), ())), ()), ("score-logtfidf",cts:score-order("descending")), 1))[1 to 10]</search:report>
</search:response>

And maven:

$ mvn -Dtest=CombinedQueryBuilderTest test
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building MarkLogic Java Client API 3.0.1
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ java-client-api ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 37 resources
[INFO]
[INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ java-client-api ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ java-client-api ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 49 resources
[INFO]
[INFO] --- maven-compiler-plugin:2.3.2:testCompile (default-testCompile) @ java-client-api ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ java-client-api ---
[INFO] Surefire report directory: E:\marklogic\projects\java-client-api-dev\target\surefire-reports

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running com.marklogic.client.test.CombinedQueryBuilderTest
14:55:43.421 [main] DEBUG c.m.client.DatabaseClientFactory - Creating new database client for server at localhost:8012
14:55:43.485 [main] DEBUG c.m.client.impl.JerseyServices - Connecting to localhost at 8012 as rest-writer
Running test248
14:55:44.942 [main] DEBUG c.m.client.DatabaseClientFactory - Creating new database client for server at localhost:8011
14:55:44.943 [main] DEBUG c.m.client.impl.JerseyServices - Connecting to localhost at 8011 as rest-writer
14:55:45.224 [main] INFO  c.m.client.impl.DocumentManagerImpl - Writing content for /qbe/constraint1.json
14:55:45.230 [main] DEBUG c.m.client.impl.JerseyServices - Sending /qbe/constraint1.json document in transaction null
Write /qbe/constraint1.json to database
14:55:46.272 [main] INFO  c.m.client.impl.DocumentManagerImpl - Writing content for /qbe/constraint2.json
14:55:46.272 [main] DEBUG c.m.client.impl.JerseyServices - Sending /qbe/constraint2.json document in transaction null
Write /qbe/constraint2.json to database
14:55:46.284 [main] INFO  c.m.client.impl.DocumentManagerImpl - Writing content for /qbe/constraint3.json
14:55:46.284 [main] DEBUG c.m.client.impl.JerseyServices - Sending /qbe/constraint3.json document in transaction null
Write /qbe/constraint3.json to database
14:55:46.301 [main] INFO  c.m.client.impl.DocumentManagerImpl - Writing content for /qbe/constraint4.json
14:55:46.301 [main] DEBUG c.m.client.impl.JerseyServices - Sending /qbe/constraint4.json document in transaction null
Write /qbe/constraint4.json to database
14:55:46.324 [main] INFO  c.m.client.impl.DocumentManagerImpl - Writing content for /qbe/constraint5.json
14:55:46.324 [main] DEBUG c.m.client.impl.JerseyServices - Sending /qbe/constraint5.json document in transaction null
Write /qbe/constraint5.json to database
14:55:46.358 [main] DEBUG c.m.client.impl.JerseyServices - Raw search
<search:response snippet-format="snippet" total="0" start="1" page-length="10" xmlns:search="http://marklogic.com/appservices/search">
  <search:report id="SEARCH-FLWOR">(cts:search(fn:collection(), cts:or-query((cts:and-query((cts:field-word-query("para", "Bush", ("case-insensitive","lang=en"), 1), cts:not-query(cts:field-word-query("para", "memex", ("case-insensitive","lang=en"), 1), 1)), ()), cts:and-query((cts:element-value-query(fn:QName("","id"), "0026", ("lang=en"), 1), cts:word-query("memex", ("lang=en"), 1)), ())), ()), ("score-logtfidf",cts:score-order("descending")), 1))[1 to 10]</search:report>
</search:response>

14:55:46.419 [main] INFO  c.m.client.impl.DatabaseClientImpl - Releasing connection
14:55:46.419 [main] DEBUG c.m.client.impl.JerseyServices - Releasing connection
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 3.971 sec

Results :

Tests run: 2, Failures: 0, Errors: 0, Skipped: 0

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 13.700 s
[INFO] Finished at: 2015-01-28T14:55:46-07:00
[INFO] Final Memory: 10M/155M
[INFO] ------------------------------------------------------------------------

FYI, this line is doing nothing: confMgr.setQueryValidation(true);

To do something you'd want to call confMgr.readConfiguration() first, then confMgr.writeConfiguration() after confMgr.setQueryValidation(true).

sammefford commented 9 years ago

I was able to dup it. It requires /v1/config/properties/validate-queries to be true, which I thought I had, but perhaps I accidentally set it to true on the wrong port.

sammefford commented 9 years ago

Ok, the issue with the test is that "constraint-name" must come before "text" within a "word-constraint-query". I think that's an issue because JSON objects should not require any order, so I'll log it against the REST API. But the issue isn't in the Java API, so if you agree with my work-around you can close this.

georgeajit commented 9 years ago

The test works as expected as of 03/12/2015 with Java-client API develop branch on MarkLogic Server 8.0 nightly build (20150312).