Hi, Florent:

I'm wondering whether a CRLF is required before the initial boundary.  That 
seems to be implied but not explicitly stated by:

    https://www.w3.org/Protocols/rfc1341/7_2_Multipart.html

A couple of suggestions for investigating:

*  Confirm that the constructed multipart/mixed is parseable using 
xdmp.multipartDecode()

    https://docs.marklogic.com/xdmp.multipartDecode

*  Write the two documents individually, read both document back in a single 
request that accepts multipart/mixed, and compare the REST API response to the 
constructed multipart/mixed

    https://docs.marklogic.com/REST/GET/v1/documents

If that doesn't discover the issue, maybe setting the content-length in the 
part might help (though the standard explicitly requires no headers in the 
part).


Hoping that's useful,


Erik Hennum


________________________________
From: general-boun...@developer.marklogic.com 
[general-boun...@developer.marklogic.com] on behalf of Florent Georges 
[li...@fgeorges.org]
Sent: Sunday, July 30, 2017 5:56 AM
To: MarkLogic Developer Discussion
Subject: Re: [MarkLogic Dev General] Client API - 8000 - POST /v1/documents - 
Unexpected 400

Hi,

Actually, I made a mistake in the Content-Type of the overall request, I used 
"multipart/related" instead of "multipart/mixed" as mentioned in the doc.  But 
when I fix it, I get a 500 with the following error message:

XDMP-AS: (err:XPTY0004) $meta-type as xs:string -- Invalid coercion: () as 
xs:string . See the MarkLogic server error log for further detail.

It seems it all goes down to $content-type being the empty sequence in the 
following call in document-model-update.xqy (in ML 9.0-1.1):

let $document-next   :=
    if ($part-type ne "document-metadata") then ()
    else docmodupd:parse-metadata-map($curr-uri,$content-type,$body)

But then, it is beyond my knowledge...

Regards,

--
Florent Georges
H2O Consulting
http://h2o.consulting/


On 30 July 2017 at 11:41, Florent Georges wrote:
Hi,

I am trying to use the POST /v1/documents endpoint on 8000 to insert several 
documents at once.  From the chapter "Reading and Writing Multiple Documents" 
in the REST Guide, in section "Specifying an Explicit Document URI" [1], the 
following pseudo header in each part should be enough to set the URI for each 
document:

Content-Disposition: attachment;filename=/your/uri

But I get a 400 with the message: "REST-REQUIREDPARAM: (err:FOER0000) Required 
parameter: missing required extension parameter".

Any idea why?

[1]https://docs.marklogic.com/guide/rest-dev/bulk#id_84006

Below a complete repro that can be played in QConsole (and later an example 
using PUT instead, which does work):

'use strict';

const rn  = '\r\n';
const bnd = '.ml.rockzzz.';
var body = rn;

// first part
body += '--' + bnd + rn;
body += 'Content-Type: application/json' + rn;
body += 'Content-Disposition: attachment; filename="/test/multi-one.json"' + rn;
body += rn;
body += JSON.stringify({ hello: 'one!' });
body += rn;

// second part
body += '--' + bnd + rn;
body += 'Content-Type: application/json' + rn;
body += 'Content-Disposition: attachment; filename="/test/multi-two.json"' + rn;
body += rn;
body += JSON.stringify({ hello: 'two!' });
body += rn;

// after the last part
body += '--' + bnd + '--' + rn;

xdmp.httpPost(
  'http://localhost:8000/v1/documents', {
    authentication : {
      method : 'digest',
      username : 'admin',
      password : 'admin'
    },
    headers: {
      "Content-type": 'multipart/related; boundary=' + bnd,
      Accept: "application/json"
    },
    data: body
  });

Here is the example using PUT, and indeed working fine:

'use strict';

xdmp.httpPut(
  'http://localhost:8000/v1/documents?uri=/test/single.json', {
    authentication : {
      method : 'digest',
      username : 'admin',
      password : 'admin'
    },
    headers: {
      "Content-type": 'application/json',
      Accept: "application/json"
    },
    data: JSON.stringify({ hello: 'world!' })
  });

Any idea what I did wrong?

Regards,

--
Florent Georges
H2O Consulting
http://h2o.consulting/






_______________________________________________
General mailing list
General@developer.marklogic.com
Manage your subscription at: 
http://developer.marklogic.com/mailman/listinfo/general

Reply via email to