Roy Tang

Programmer, engineer, scientist, critic, gamer, dreamer, and kid-at-heart.

Blog Notes Photos Links Archives About

I’m trying out the Roxy deployer. The Roxy app was created using the default app-type. I setup a new ML 9 database, and I ran “ml local bootstrap” using the default ports (8040 and 8041)

Then I setup a node application. I tried the following (sample code from

var marklogic = require('marklogic');
var conn = {
    host: '',  
    port: 8040,
    user: 'admin',
    password: 'admin',
    authType: 'DIGEST'

var db = marklogic.createDatabaseClient(conn);

  {author: 'Beryl Markham'},
  {author: 'WG Sebald'}
.result(function(response) {
    console.log(JSON.stringify(response, null, 2));
  }, function (error) {
    console.log(JSON.stringify(error, null, 2));

Running the script gave me an error like:

$ node test.js
  "message": "write document list: cannot process response with 500 status",
  "statusCode": 500,
  "body": "<error:error xsi:schemaLocation=\" error.xsd\" xmlns:error=\"\" xmlns:xsi=\"\">\n  <error:code>XDMP-IMPMODNS</error:code>\n  <error:name>err:XQST0059</error:name>\n  <error:xquery-version>1.0-ml</error:xquery-version>\n  <error:message>Import module namespace mismatch</error:message>\n  <error:format-string>XDMP-IMPMODNS: (err:XQST0059) Import module namespace does not match target namespace of imported module /MarkLogic/rest-api/endpoints/config.xqy</error:format-string>\n  <error:retryable>false</error:retryable>\n  <error:expr/>\n  <error:data>\n    <error:datum></error:datum>\n    <error:datum></error:datum>\n    <error:datum>/MarkLogic/rest-api/endpoints/config.xqy</error:datum>\n  </error:data>\n  <error:stack>\n    <error:frame>\n      <error:uri>/roxy/lib/rewriter-lib.xqy</error:uri>\n      <error:line>5</error:line>\n      <error:column>0</error:column>\n      <error:xquery-version>1.0-ml</error:xquery-version>\n    </error:frame>\n  </error:stack>\n</error:error>\n"

If I change the port to 8000 (the default appserver that inserts into Documents), the node function executes correctly as expected. I’m not sure if I need to configure anything else with the Roxy-created appserver so that it works with the node.js application.

I’m not sure where the “DELETE_IF_UNUSED” part in the error message is coming from either. There doesn’t seem to be any such text in the configuration files generated by Roxy.

Edit: When accessing via the browser, I get a an xml with a similar error:

<error:error xsi:schemaLocation=" error.xsd" xmlns:error="" xmlns:xsi="">
  <error:message>Import module namespace mismatch</error:message>
  <error:format-string>XDMP-IMPMODNS: (err:XQST0059) Import module namespace does not match target namespace of imported module /MarkLogic/rest-api/endpoints/config.xqy</error:format-string>

If it matters, MarkLogic version is 9.0-3.1. It’s a fresh install too.

Any advice?


What happens if you point a browser to http://localhost:8040? Also, when you created the Roxy project (“ml new…"), did you specify anything for --app-type?
No, it’s the default app type (I think mvc?). Accessing the rest server via the browser yields a similar error, I’ll edit this info into the original post.

Based on the comments, it looks like the problem is that the Node.js Client API expects to talk to a REST API endpoint, but the default Roxy configuration is an MVC application. If you haven’t already done anything major with your Roxy app, I’d remove it and create one with --app-type=rest.

$ ml new my-app --app-type=rest --server-version=9
$ ml local bootstrap
$ ml local deploy modules

Then try your Node app.