Posts Photos 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?


Dave Cassel said...

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?

Roy Tang said...

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.

Dave Cassel said...

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.