Hi Danny,

You don't have to make the entire transaction a query to spawn an update; you 
can explicitly set the transaction-mode in the xdmp:spawn-function expression. 
(note: you will have to explicitly commit the update transaction)

Ex:

xdmp:spawn-function(function() {
    xdmp:document-insert("/2014/11/20/danny.jpg", $temp_image, 
xdmp:default-permissions()),
    xdmp:commit()
  },
  <options xmlns="xdmp:eval">
    <transaction-mode>update</transaction-mode>
  </options>)

Thanks.

-jb

From: Danny Sinang <[email protected]<mailto:[email protected]>>
Reply-To: MarkLogic Developer Discussion 
<[email protected]<mailto:[email protected]>>
Date: Wednesday, March 11, 2015 at 2:34 PM
To: general 
<[email protected]<mailto:[email protected]>>
Subject: Re: [MarkLogic Dev General] REST API call results in 
XDMP-UPDATEFUNCTIONFROMQUERY

I think it's working now.

Just added this line :

declare namespace rapi= "http://marklogic.com/rest-api";;

On Wed, Mar 11, 2015 at 3:27 PM, Danny Sinang 
<[email protected]<mailto:[email protected]>> wrote:
I tried prefixing my function declaration like this :


declare %rapi:transaction-mode("update")

as suggested in http://docs.marklogic.com/guide/rest-dev/extensions#id_17130 .

But I'm now getting this error :

XDMP-UNBPRFX: (err:XPST0081) Prefix rapi has no namespace binding.

Regards,
Danny


On Wed, Mar 11, 2015 at 3:00 PM, Danny Sinang 
<[email protected]<mailto:[email protected]>> wrote:
Hello,

Whenever I make call to

http://marklogic.mycompany.com:9042/v1/resources/resize?rs:width=300&rs:height=300&rs:uri=/2014/11/20/IC20141120.jpg

I get this error message :

<rapi:error 
xmlns:rapi="http://marklogic.com/rest-api";><rapi:status-code>500</rapi:status-code><rapi:status>INTERNAL
 
ERROR</rapi:status><rapi:message-code>XDMP-UPDATEFUNCTIONFROMQUERY</rapi:message-code><rapi:message>XDMP-UPDATEFUNCTIONFROMQUERY:
 Q{http://marklogic.com/rest-api/resource/resize}get#2($context, 
$service-params) -- Cannot apply an update function from a query. See the 
MarkLogic server error log for further detail.</rapi:message></rapi:error>

I know this happens because of the xdmp:document-insert() call inside the code 
for that API call.

My question is, is there a workaround for this ?

I already tried wrapping the document-insert call with xdmp:spawn-function, but 
that didn't work either.

Below is the code.

Regards,
Danny

=======================================================================================

xquery version "1.0-ml";

module namespace local = "http://marklogic.com/rest-api/resource/resize";;

declare option xdmp:update "true";

declare function local:get($contextas map:map, $params  as map:map) as 
document-node()* {
let $image_server_root  := "http://solrdev1.mycompany.com:7000/resize_image";
let $uri                := map:get($params,"uri")
let $width              := map:get($params,"width")
let $height             := map:get($params,"height")
let $resized_uri        := 
fn:concat(fn:substring-before($uri,".jpg"),"_",$width,"_",$height,".jpg")
let $resized_image      :=
if (xdmp:uri-is-file($resized_uri)) then
fn:doc($resized_uri)
else
let $image      := fn:doc($uri)/node()
let$image_name := fn:tokenize($uri,"/")[last()]
let$temp_image := 
xdmp:http-put(fn:concat($image_server_root,"/",$width,"/",$height,"/",$image_name,"?resized_uri=",$resized_uri),
 (), $image)[2]
let$_ := xdmp:spawn-function(function() { 
xdmp:document-insert("/2014/11/20/danny.jpg", $temp_image, 
xdmp:default-permissions()) })
return
$temp_image
let $mime_type := map:put($context,"output-types","image/jpeg")
return document{$resized_image}
};


_______________________________________________
General mailing list
[email protected]
http://developer.marklogic.com/mailman/listinfo/general

Reply via email to