-
Notifications
You must be signed in to change notification settings - Fork 74
Closed
Description
Version of MarkLogic Java Client API
4.1
Version of MarkLogic Server
10.0 nightly build
Java version
1.8
OS and version
Windows - Test ran in Eclipse IDE
Input:
API Decl file:
{
"functionName" : "documentInAndStringOutAsArray",
"params" : [ {
"name" : "inputFiles",
"datatype" : "jsonDocument",
"multiple" : true,
"nullable" : false,
"desc" : "A sequence of JSON documents that need to be written to Database"
},
{
"name" : "uris",
"datatype" : "string",
"multiple" : true,
"nullable" : false,
"desc" : "A sequence of document uris for docs written to Database"
},
{
"name" : "searchItem",
"datatype" : "string",
"multiple" : true,
"nullable" : false,
"desc" : "Search string with 1 word or multiples"
}
],
"return" : {
"desc" : "Module to return array of doc Ids",
"datatype" : "array",
"multiple" : true,
"nullable" : false,
"$javaClass" : "java.lang.String"
}
}
Class file generated:
/**
* This class verifies the stream of Json documents written into DB and accepts a string query. REturns URIs
*/
interface TestE2EMultipleDocsInMultipleStringsout {
/**
* Creates a TestE2EMultipleDocsInMultipleStringsout object for executing operations on the database server.
*
* The DatabaseClientFactory class can create the DatabaseClient parameter. A single
* client object can be used for any number of requests and in multiple threads.
*
* @param db provides a client for communicating with the database server
* @return an object for session state
*/
static TestE2EMultipleDocsInMultipleStringsout on(DatabaseClient db) {
final class TestE2EMultipleDocsInMultipleStringsoutImpl implements TestE2EMultipleDocsInMultipleStringsout {
private BaseProxy baseProxy;
private TestE2EMultipleDocsInMultipleStringsoutImpl(DatabaseClient dbClient) {
baseProxy = new BaseProxy(dbClient, "/ext/TestE2EMultipleDocsInMultipleStringsOut/");
}
@Override
public Stream<java.lang.String> documentInAndStringOutAsArray(Stream<Reader> inputFiles, Stream<String> uris, Stream<String> searchItem) {
return BaseProxy.ArrayType.toString(
baseProxy
.request("TestE2EJsonDocsInStringsOut.sjs", BaseProxy.ParameterValuesKind.MULTIPLE_MIXED)
.withSession()
.withParams(
BaseProxy.documentParam("inputFiles", false, BaseProxy.JsonDocumentType.fromReader(inputFiles)),
BaseProxy.atomicParam("uris", false, BaseProxy.StringType.fromString(uris)),
BaseProxy.atomicParam("searchItem", false, BaseProxy.StringType.fromString(searchItem)))
.withMethod("POST")
.responseMultiple(false, Format.JSON)
);
}
}
return new TestE2EMultipleDocsInMultipleStringsoutImpl(db);
}
/**
* Invokes the documentInAndStringOutAsArray operation on the database server
*
* @param inputFiles A sequence of JSON documents that need to be written to Database
* @param uris A sequence of document uris for docs written to Database
* @param searchItem Search string with 1 word or multiples
* @return Module to return array of doc Ids
*/
Stream<java.lang.String> documentInAndStringOutAsArray(Stream<Reader> inputFiles, Stream<String> uris, Stream<String> searchItem);
}
Test method:
@Test
public void TestE2EJsonDocsInStringsOut() throws Exception {
System.out.println("Running TestE2EJsonDocsInStringsOut");
String dirName = "src/test/java/com/marklogic/client/functionaltest/data/";
String[] filenames = { "constraint1.json", "constraint2.json", "constraint3.json", "constraint4.json", "constraint5.json" };
// Invoke the function with no Params - API decl states params as required
String msg;
// Holder for module function's output
Stream<java.lang.String> outputStrSeq;
// Assemble a Stream
Stream<Reader> inputFiles = Stream.of(new BufferedReader(new FileReader(dirName+filenames[0])),
new BufferedReader(new FileReader(dirName+filenames[1])),
new BufferedReader(new FileReader(dirName+filenames[2])),
new BufferedReader(new FileReader(dirName+filenames[3])),
new BufferedReader(new FileReader(dirName+filenames[4]))
);
Stream<java.lang.String> uris = Stream.of(filenames);
Stream<java.lang.String> searchItem = Stream.of("Vannevar");
try {
outputStrSeq = TestE2EMultipleDocsInMultipleStringsout.on(dbclient).documentInAndStringOutAsArray(inputFiles, uris, searchItem);
} catch (Exception ex) {
msg = ex.toString();
System.out.println("Exception response from the Client API call is " + ex.toString());
parameter: items"));
// TODO Additional asserts
}
}
Actual output: What did you observe? What errors did you see? Can you attach the logs? (Java logs, MarkLogic logs)
Exception seen.
java.lang.ClassFormatError: Invalid method signature in method com.marklogic.client.impl.NodeConverter.lambda$38(L[B;)Lcom/marklogic/client/io/BytesHandle;
at com.marklogic.client.impl.BaseProxy$JsonDocumentType.fromReader(BaseProxy.java:319)
at com.marklogic.client.functionaltest.TestE2EMultipleDocsInMultipleStringsout$1TestE2EMultipleDocsInMultipleStringsoutImpl.documentInAndStringOutAsArray(TestClientAPIE2EInegerParaReturnDouble.java:568)
at com.marklogic.client.functionaltest.TestClientAPIE2EInegerParaReturnDouble.TestE2EJsonDocsInStringsOut(TestClientAPIE2EInegerParaReturnDouble.java:414)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:538)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:760)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:460)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:206)
Expected output: What specifically did you expect to happen?
Invoke server side SJS module and return a list of URIs for the search item (query string)
Alternatives: What else have you tried, actual/expected?
N/A