HI.
Yes, I had a look. The first reason I thought of the xdmp:unquote was
because of the multipart form post. We have a system where we get XML
packed inside of json in the body of a post and use xdmp:unquote and this
seemed similiar.
I concluded that this might have been similiar looking at your code
*rewriter:*
...
case element(POST)
return
let $urlParams := let $paramNames:=
xdmp:get-request-field-names()
for $eachParam in
$paramNames
let $paramValue
:= xdmp:get-request-field($eachParam)
....
*INvoker:*
...
let $_populate-map := for $each-param in $urlParams
let $param-value :=
xdmp:get-request-field($each-param) <----- Still not XML at this stage, I
would assume
...
Kind Regards,
David
Kind Regards,
David Ennis
David Ennis
*Content Engineer*
[image: HintTech] <http://www.hinttech.com/>
Mastering the value of content
creative | technology | content
Delftechpark 37i
2628 XJ Delft
The Netherlands
T: +31 88 268 25 00
M: +31 63 091 72 80
[image: http://www.hinttech.com] <http://www.hinttech.com>
<https://twitter.com/HintTech> <http://www.facebook.com/HintTech>
<http://www.linkedin.com/company/HintTech>
On 16 October 2014 13:15, Kapoor, Pragya <[email protected]> wrote:
> Hi,
>
>
> Yes, I tried using xdmp:unquote on $contents but still not working.
>
> Did you get a chance to look into the code which I attached in previous
> mail?
>
>
>
> Thanks
>
> Pragya
> ------------------------------
> *From:* [email protected] <
> [email protected]> on behalf of David Ennis <
> [email protected]>
> *Sent:* Thursday, October 16, 2014 2:41 PM
> *To:* MarkLogic Developer Discussion
> *Subject:* Re: [MarkLogic Dev General] using xdmp:eval in REST Service
>
> HI.
>
> I Know that this does not answer the whole question - but since things are
> getting serialized, have you tried xdmp:unquote on the serialized XML (the
> $contents variable in the original example)?
>
> Kind Regards,
> David Ennis
>
>
>
>
> On 16 October 2014 06:44, Kapoor, Pragya <[email protected]> wrote:
>
>> Hi,
>>
>>
>> I am using Postman Rest Client to call this service. I am using POST
>> method and sending parameters in form-data.
>>
>> URL: http://{hostname}:8010/v1/addDocument
>> <http://10.190.57.71:8010/v1/addDocument>
>>
>>
>> ML Version: 7.0-2.3
>>
>>
>> I tried using xdmp:invoke instead of xdmp:eval but still the xml is
>> getting serialized.
>>
>>
>> Attached is the code I am using.
>>
>>
>> Thanks
>>
>> Pragya
>> ------------------------------
>> *From:* [email protected] <
>> [email protected]> on behalf of David Lee <
>> [email protected]>
>> *Sent:* Wednesday, October 15, 2014 5:26 PM
>> *To:* MarkLogic Developer Discussion
>> *Subject:* Re: [MarkLogic Dev General] using xdmp:eval in REST Service
>>
>>
>> Could you show your code for how you run this via the REST interface ?
>>
>> Which version of ML, and what method of accessing REST ?
>>
>>
>>
>> One thing that stands out is the use of Eval ... this can get tricky when
>> embedding in other code because of the multiple layer of string escaping
>> needed ...
>>
>> You also don’t need the functx import inside the eval but that’s a
>> different issue.
>>
>> Instead of xdmp:eval I prefer xdmp:invoke-function(
>>
>> http://docs.marklogic.com/xdmp:invoke-function
>>
>>
>>
>> This simplifies (eliminates) the need to construct XQuery from strings
>> (so its safer from XQuery injection and less likely to be corrupted when
>> created from
>>
>> other code.
>>
>>
>>
>> Your example could then become:
>>
>>
>>
>> let $DirectoryListing :=
>>
>> xdmp:invoke-function(
>>
>> function() {
>>
>> xdmp:directory($Path)
>>
>> } ,
>>
>> <options xmlns="xdmp:eval">
>>
>> <database>{xdmp:database("Ingestion")}</database>
>>
>> </options>
>>
>> )
>>
>>
>>
>> With no need to pass in external parameters or add delcarations in the
>> body or quote things.
>>
>> Try this first - ... it’s a good trick to learn to write easier and
>> safer code.
>>
>>
>>
>> But I suspect your real problem is something else - we need to see the
>> code your running from REST
>>
>>
>>
>> The only xdmp:log() I see is for the docURI
>>
>> xdmp:log(fn:concat("uri",$docUri))
>>
>>
>>
>> So the code your showing us isnt likely the actual code your running.
>>
>>
>>
>> Could you provide the code your running ?
>>
>> What library or language you using to call the REST APIS's ?
>>
>> What your showing looks like the results are being serialized as text
>> before you get them into
>>
>> let $DirectoryListing :=
>>
>>
>>
>>
>>
>>
>>
>>
>> -----------------------------------------------------------------------------
>>
>> David Lee
>> Lead Engineer
>> *Mark**Logic* Corporation
>> [email protected]
>> Phone: +1 812-482-5224
>>
>> Cell: +1 812-630-7622
>> www.marklogic.com
>>
>>
>>
>> *From:* [email protected] [mailto:
>> [email protected]] *On Behalf Of *Kapoor, Pragya
>> *Sent:* Wednesday, October 15, 2014 3:59 AM
>> *To:* [email protected]
>> *Subject:* [MarkLogic Dev General] using xdmp:eval in REST Service
>>
>>
>>
>> Hi,
>>
>>
>>
>> I need to pick the all the docs in directory path ($Path) from Ingestion
>> DB and insert them in Db which is configured for rest
>> services(rest-ingestion).
>>
>>
>>
>> The below code works fine from Qconsole, but from Rest service , the xml
>> being picked from the Ingestion DB is not coming as xml when the code is
>> hit from Rest service. In logs, only content is theres, xml elements are
>> missing.(attached are the logs)
>>
>>
>>
>> Please let me know, what I am missing in this code.
>>
>>
>>
>> Thanks
>>
>> Pragya
>>
>>
>>
>> Code:
>>
>>
>>
>> import module namespace dls = "http://marklogic.com/xdmp/dls"
>>
>> at "/MarkLogic/dls.xqy";
>>
>>
>>
>> import module namespace functx = "http://www.functx.com"
>>
>> at "/MarkLogic/functx/functx-1.0-nodoc-2007-01.xqy";
>>
>>
>>
>> let $transId := '39932186-9cab-44e9-8f4f-7ebf45dabf8f'
>>
>> let $PrefixURI := "/docs/"
>>
>>
>>
>> let $Path := fn:concat('/processing/', $transId,'/validDocs/')
>>
>> let $DirectoryListing :=
>>
>> xdmp:eval('
>>
>> import module namespace functx = "
>> http://www.functx.com"
>>
>> at
>> "/MarkLogic/functx/functx-1.0-nodoc-2007-01.xqy";
>>
>> declare variable $Path as xs:string external;
>>
>>
>>
>> xdmp:directory($Path)
>>
>> '
>>
>> ,
>>
>> (xs:QName("Path"), $Path)
>>
>> ,
>>
>> <options xmlns="xdmp:eval">
>>
>>
>> <database>{xdmp:database("Ingestion")}</database>
>>
>> </options>
>>
>> )
>>
>> for $FileEntry in $DirectoryListing
>>
>> let $Filename :=
>> functx:substring-after-last(xdmp:node-uri($FileEntry),'/')
>>
>> let $docUri := fn:concat($PrefixURI, $Filename)
>>
>> let $_ := xdmp:log(fn:concat("uri",$docUri))
>>
>> let $contents := $FileEntry
>>
>> return
>>
>> (: Insert the document :)
>>
>> (dls:document-insert-and-manage(
>>
>> $docUri,
>>
>> fn:false(),
>>
>> $contents,
>>
>> "created",
>>
>> (xdmp:permission("dls-user", "read"),
>>
>> xdmp:permission("dls-user", "update")),
>>
>> "historic"),
>>
>> xdmp:document-add-collections(
>>
>> $docUri,
>>
>> "latest"),
>>
>> xdmp:document-remove-collections(
>>
>> $docUri, "historic")
>>
>>
>>
>> )
>>
>>
>>
>> "This e-mail and any attachments transmitted with it are for the sole use
>> of the intended recipient(s) and may contain confidential , proprietary or
>> privileged information. If you are not the intended recipient, please
>> contact the sender by reply e-mail and destroy all copies of the original
>> message. Any unauthorized review, use, disclosure, dissemination,
>> forwarding, printing or copying of this e-mail or any action taken in
>> reliance on this e-mail is strictly prohibited and may be unlawful."
>> "This e-mail and any attachments transmitted with it are for the sole
>> use of the intended recipient(s) and may contain confidential , proprietary
>> or privileged information. If you are not the intended recipient, please
>> contact the sender by reply e-mail and destroy all copies of the original
>> message. Any unauthorized review, use, disclosure, dissemination,
>> forwarding, printing or copying of this e-mail or any action taken in
>> reliance on this e-mail is strictly prohibited and may be unlawful."
>>
>> _______________________________________________
>> General mailing list
>> [email protected]
>> http://developer.marklogic.com/mailman/listinfo/general
>>
>>
> "This e-mail and any attachments transmitted with it are for the sole
> use of the intended recipient(s) and may contain confidential , proprietary
> or privileged information. If you are not the intended recipient, please
> contact the sender by reply e-mail and destroy all copies of the original
> message. Any unauthorized review, use, disclosure, dissemination,
> forwarding, printing or copying of this e-mail or any action taken in
> reliance on this e-mail is strictly prohibited and may be unlawful."
>
> _______________________________________________
> General mailing list
> [email protected]
> http://developer.marklogic.com/mailman/listinfo/general
>
>
_______________________________________________
General mailing list
[email protected]
http://developer.marklogic.com/mailman/listinfo/general