- 
                Notifications
    You must be signed in to change notification settings 
- Fork 74
Closed
Description
So we can address your issue, please include the following:
Version of MarkLogic Java Client API
5.3.0
Version of MarkLogic Server
10.0-5
Java version
JDK 1.8 u261
OS and version
Windows IntelliJ IDE
Input: Some code to illustrate the problem, preferably in a state that can be independently reproduced on our end
'use strict';
var endpointState;          // jsonDocument?
var endpointConstants;      // jsonDocument?
declareUpdate();
const w = fn.head(xdmp.fromJSON(endpointConstants));
const endpt = fn.head(xdmp.fromJSON(endpointState));
const thisBatchStart = endpt.returnIndex;
endpt.returnIndex = endpt.returnIndex + w.max - 1;
fn.error(xs.QName("XDMP-INVALDATE"), "greater than 50");
...
...
let ret = Sequence.from(res)
console.log(ret);
ret;
{
  "endpoint": "/dynamic/fntest/DynamicEgressServicesError/json/DynamicEgressServicesForJsonError.sjs",
  "params": [ {
    "name":     "endpointState",
    "datatype": "jsonDocument",
    "multiple": false,
    "nullable": true
    }, {
    "name":     "session",
    "datatype": "session",
    "multiple": false,
    "nullable": true
    }, {
    "name":     "endpointConstants",
    "datatype": "jsonDocument",
    "multiple": false,
    "nullable": true
    } ],
  "return": {
    "datatype": "jsonDocument",
    "multiple": true,
    "nullable": true
  }
}
...
...
OutputCaller<InputStream> unloadEndpt = OutputCaller.on(dbclient, new FileHandle(new File(ApiConfigDirPath + JsonEgressErrorConfigName + ".api")), new InputStreamHandle());
            IOEndpoint.CallContext callContextArray = unloadEndpt.newCallContext()
                    .withEndpointStateAs(returnIndex)
                    .withEndpointConstantsAs(workParams);
            OutputCaller.BulkOutputCaller<InputStream> outputBulkCaller = unloadEndpt.bulkCaller(callContextArray);
            OutputCaller.BulkOutputCaller.ErrorListener errorListener =
                    (retryCount, throwable, callContext)
                            -> {
                        retryBuf.append(throwable.getMessage());
                        return IOEndpoint.BulkIOEndpointCaller.ErrorDisposition.SKIP_CALL;
                    };
            outputBulkCaller.setOutputListener(record -> {
                        try {
                            ObjectMapper mapper = new ObjectMapper();
                            String s = mapper.readValue(record, ObjectNode.class).toString();
                            batchResults.append(s);
                        } catch (IOException e) {
                            err.append(e.getMessage());
                            e.printStackTrace();
                        }
                    }
            );
            outputBulkCaller.setErrorListener(errorListener);
            outputBulkCaller.awaitCompletion();
            System.out.println("Error buffer is " + retryBuf.toString());
...
...
Actual output: What did you observe? What errors did you see? Can you attach the logs? (Java logs, MarkLogic logs)
Client side error message:
failed to POST at /dynamic/fntest/DynamicEgressServicesError/json/DynamicEgressServicesForJsonError.sjs: Internal Server Error. Server Message: Server did not respond with an expected Error message.
Server side error message:
09:51:47.329 Info: Status 500: greater than 50 (ERROR): fn.error(xs.QName("ERROR"), "greater than 50"); --
The above error is the message from fn.error() call.
Expected output: What specifically did you expect to happen?
Expect server side message to pass through to client code.
Alternatives: What else have you tried, actual/expected?
n/a