Skip to content

Stream of BufferedReader instances throws ClassFormatError Invalid method signature #964

@georgeajit

Description

@georgeajit

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

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions