Hi Charles and Erik (combined responses),

That's correct, I've added it to the REST instance's modules DB.

These are the permissions I have on the library modules (jam.xqy and 
jam-utils.xqy):
<perms>
  <perm>
    <role>app-builder</role>
    <cap>update</cap>
  </perm>
  <perm>
    <role>app-user</role>
    <cap>execute</cap>
  </perm>
  <perm>
    <role>app-user</role>
    <cap>read</cap>
  </perm>
  <perm>
    <role>rest-reader</role>
    <cap>execute</cap>
  </perm>
  <perm>
    <role>rest-reader</role>
    <cap>read</cap>
  </perm>
  <perm>
    <role>rest-writer</role>
    <cap>update</cap>
  </perm>
  <perm>
    <role>rest-writer</role>
    <cap>insert</cap>
  </perm>
  <perm>
    <role>application-plugin-registrar</role>
    <cap>read</cap>
  </perm>
  <perm>
    <role>application-plugin-registrar</role>
    <cap>execute</cap>
  </perm>
 </perms>

And I still get the ERROR when using:  curl --anyauth --user admin:admin -X PUT 
-d@"/home/tpf106/davids/xquery/createPDF.xqy" -H "Content-type: 
application/xquery" 'http://ilabsmltest:8011/v1/config/transforms/createPDF'
(I'm using 6.0-1.1)

David

-----Original Message-----
From: [email protected] 
[mailto:[email protected]] On Behalf Of Erik Hennum
Sent: Thursday, April 04, 2013 8:17 PM
To: MarkLogic Developer Discussion
Subject: Re: [MarkLogic Dev General] Probably doing something stupid... - using 
modules in REST transform

Hi, David:

The description sounds like a known 6.0-2 bug that occurs when a transform or 
resource service extension imports a module database library that, in turn, 
contains an import.  

The workaround is either to put all of the imports in the extension (when 
possible) or to grant execute permission on the module database libraries to 
both the rest-reader and application-plugin-registrar roles.

6.0-3 should provide a fix for this bug.

There is, however, a related bug that won't be fixed in 6.0-3.  If a dependency 
library in the module database is updated, the extension will continue to use 
the old version.  The workaround is to update the extension any time a 
dependency in the module database is updated.


Hoping that helps,


Erik Hennum

-----Original Message-----
From: [email protected] 
[mailto:[email protected]] On Behalf Of Charles Greer
Sent: Thursday, April 04, 2013 6:50 PM
To: [email protected]
Subject: Re: [MarkLogic Dev General] Probably doing something stupid... - using 
modules in REST transform

Hi David,

You're hitting a limitation of the REST API in its first incarnation.  
Early access for ML7 is out, and we've addressed this particular concern by 
providing an endpoint to put your own libraries in the REST instance's modules 
database with the right permissions and all.

It looks like you did this by hand -- the jam libs are in your REST instance's 
modules database, right?  In that case, it might be that you just need to make 
them executable by rest-reader role, and also make sure they're stored as text 
(as opposed to binary)

Hope that helps,

Charles

On 04/04/2013 12:55 PM, Steiner, David J. (LNG-DAY) wrote:
> It works from QC whether I use any of these:
> import module namespace jam = "http://xqdev.com/jam"; at "jam.xqy"; 
> import module namespace jam = "http://xqdev.com/jam"; at "/jam.xqy"; 
> import module namespace jam = "http://xqdev.com/jam"; at " 
> /marklogic.rest.transform/createPDF/lib/jam.xqy";
>
>
> -----Original Message-----
> From: [email protected] 
> [mailto:[email protected]] On Behalf Of Steiner, 
> David J. (LNG-DAY)
> Sent: Thursday, April 04, 2013 3:46 PM
> To: 'MarkLogic Developer Discussion'
> Subject: Re: [MarkLogic Dev General] Probably doing something 
> stupid... - using modules in REST transform
>
> OK.  I've got the syntax error worked out - it was in the module here, not in 
> the jam(s).
>
> So, this works:
>
> xquery version "1.0-ml";
>
> module namespace cpdf = 
> "http://marklogic.com/rest-api/transform/createPDF";;
>
> declare function cpdf:transform(
>    $context as map:map,
>    $params as map:map,
>    $content as document-node()
> ) as document-node()
> {
>    if (fn:empty($content/*)) then ($content)
>    else
>       (document {
> <doc/>
>        })
> };
>
> And I can do this successfully:
> http://localhost:8011/v1/documents?uri=/lnc/7XKV-KRG0-YB0V-9128-00000-
> 00.xml&transform=createPDF
>
>
> Now, as soon as I add the imports back in, I get the Module Not Found error 
> message:
>
> xquery version "1.0-ml";
>
> module namespace cpdf = 
> "http://marklogic.com/rest-api/transform/createPDF";;
>
> import module namespace jam = "http://xqdev.com/jam"; at "jam.xqy"; 
> import module namespace jamu = "http://xqdev.com/jam-utils"; at 
> "jam-utils.xqy";
>
> declare function cpdf:transform(
>    $context as map:map,
>    $params as map:map,
>    $content as document-node()
> ) as document-node()
> {
>    if (fn:empty($content/*)) then ($content)
>    else
>       (document {
> <doc/>
>        })
> };
>
> The log is attached.
>
> I also tried with the libraries referenced explicitely:
> /jam.xqy
> /jam-utils.xqy
> And
> /marklogic.rest.transform/createPDF/lib/jam.xqy
> /marklogic.rest.transform/createPDF/lib/jam-utils.xqy
>
> They live in both places.
>
> David
>
>
>
> -----Original Message-----
> From: Steiner, David J. (LNG-DAY)
> Sent: Thursday, April 04, 2013 3:04 PM
> To: MarkLogic Developer Discussion
> Subject: RE: [MarkLogic Dev General] Probably doing something 
> stupid... - using modules in REST transform
>
> Yeah, but the exact same library works just fine when I use it from Query 
> Console (see original note).
>
> Also, there are no error messages produced in the error log.
> The only error messages I have are those returned in the rapi:error.
>
> I'm not sure why it would work in QC and not here...
>
> -----Original Message-----
> From: [email protected] 
> [mailto:[email protected]] On Behalf Of Michael 
> Blakeley
> Sent: Thursday, April 04, 2013 3:01 PM
> To: MarkLogic Developer Discussion
> Subject: Re: [MarkLogic Dev General] Probably doing something 
> stupid... - using modules in REST transform
>
> I think the library *is* accessible, because that looks like a syntax error 
> inside the library.
>
>> XDMP-UNEXPECTED: (err:XPST0003) Unexpected token syntax error, 
>> unexpected QName_, expecting Else_
> It would be nice to have the rest of the error stack so you had the line 
> number, but that's the kind of error you might get from misspelling 'else' or 
> leaving it out.
>
>      if (false()) then 'foo' esle 'bar'
>      =>
>      XDMP-UNEXPECTED: (err:XPST0003) Unexpected token syntax error, 
> unexpected QName_, expecting Else_
>
> -- Mike
>
> On 4 Apr 2013, at 11:45 , "Steiner, David J. (LNG-DAY)" 
> <[email protected]> wrote:
>
>> Got it...  That was easy...  Thanks Mike!
>>
>> However, I still need would need to access these jam libraries that I have 
>> in the modules DB.
>>
>> Is the answer just to put them in "/marklogic.rest.transform/createPDF/lib/"?
>>
>> If so, where's that in the documentation on creating the XQuery 
>> Transformations in the REST API?
>>
>> If not, am I attempting something that's not possible?
>>
>> So, instead of just asking, I tried simply loading the modules to 
>> "/marklogic.rest.transform/createPDF/lib/" instead of just "/".
>>
>> I now get a new error:
>> <rapi:error xmlns:rapi="http://marklogic.com/rest-api";>
>>      <rapi:status-code>400</rapi:status-code>
>>      <rapi:status>Bad Request</rapi:status>
>>      <rapi:message-code>RESTAPI-INVALIDCONTENT</rapi:message-code>
>>      <rapi:message>RESTAPI-INVALIDCONTENT: (err:FOER0000) Invalid content:
>> library for createPDF has errors - XDMP-UNEXPECTED: (err:XPST0003) 
>> Unexpected token syntax error, unexpected QName_, expecting 
>> Else_</rapi:message> </rapi:error>
>>
>> Thus, I'm still stuck with not being able to access these libraries...
>>
>> -----Original Message-----
>> From: [email protected]
>> [mailto:[email protected]] On Behalf Of Michael 
>> Blakeley
>> Sent: Thursday, April 04, 2013 2:23 PM
>> To: MarkLogic Developer Discussion
>> Subject: Re: [MarkLogic Dev General] Probably doing something 
>> stupid... - using modules in REST transform
>>
>> To construct a document-node:
>>
>>     document { <test/> }
>>
>> If you xdmp:describe that output you should see that there is a 
>> document-node around the test element. As usual you can put any XQuery 
>> expression inside the curly braces.
>>
>> -- Mike
>>
>> On 4 Apr 2013, at 10:43 , "Steiner, David J. (LNG-DAY)" 
>> <[email protected]> wrote:
>>
>>> Hi Charles,
>>>
>>> OK...  I'll get back to the binary bit - never tried to produce a PDF, so 
>>> I'm not sure I'm clear on "wrap the binary output you want into a document 
>>> node".
>>>
>>> So, to get an idea of what's happening, I changed the module to this:
>>> xquery version "1.0-ml";
>>>
>>> module namespace cpdf =
>>> "http://marklogic.com/rest-api/transform/createPDF";;
>>>
>>> import module namespace jam = "http://xqdev.com/jam"; at "jam.xqy"; 
>>> import module namespace jamu = "http://xqdev.com/jam-utils"; at 
>>> "jam-utils.xqy";
>>>
>>> declare function cpdf:transform(
>>>   $context as map:map,
>>>   $params as map:map,
>>>   $content as document-node()
>>> ) as document-node()
>>> {
>>>   if (fn:empty($content/*)) then $content  else <doc>{ 
>>> jam:start("http://localhost:8080/mljam";, "mljam", "secret"), 
>>> jam:eval-get("1+1"),
>>> jam:end()
>>> }</doc>
>>> (:
>>> <doc>{
>>> (jam:start("http://ilabsmltest:8080/mljam/mljam";, "mljam", 
>>> "secret"), jamu:fop($content),
>>> jam:end())
>>> }</doc>
>>> :)
>>> };
>>>
>>> And this is the error from the error log:
>>> 2013-04-04 13:36:42.280 Info: DocumentsREST: <error:error 
>>> xsi:schemaLocation="http://marklogic.com/xdmp/error error.xsd"
>>> xmlns:error="http://marklogic.com/xd
>>> mp/error" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
>>> 2013-04-04 13:36:42.280 Info: DocumentsREST:   
>>> <error:code>XDMP-MODNOTFOUND</error:code>
>>> 2013-04-04 13:36:42.280 Info: DocumentsREST:   
>>> <error:name>err:XQST0059</error:name>
>>> 2013-04-04 13:36:42.280 Info: DocumentsREST:   
>>> <error:xquery-version>1.0-ml</error:xquery-version>
>>> 2013-04-04 13:36:42.280 Info: DocumentsREST:   <error:message>Module not 
>>> found</error:message>
>>> 2013-04-04 13:36:42.280 Info: DocumentsREST:   
>>> <error:format-string>XDMP-MODNOTFOUND: (err:XQST0059) Module 
>>> /marklogic.rest.transform/createPDF/lib/jam.xqy n
>>> ot found</error:format-string>...
>>>
>>> So, my newest question is: how do I properly specify the modules in the 
>>> REST transform XQuery module (the jam.xqy and jam-utils.xqy which live in 
>>> the modules DB for REST app server)?
>>>
>>> Thanks,
>>> David
>>>
>>> From: [email protected]
>>> [mailto:[email protected]] On Behalf Of 
>>> Charles Greer
>>> Sent: Thursday, April 04, 2013 1:00 PM
>>> To: [email protected]
>>> Subject: Re: [MarkLogic Dev General] Probably doing something stupid...
>>>
>>> Hi David,
>>>
>>> For a 500 error you should get a little more detail in the server logs, but 
>>> one thing you mention is indeed wrong -- you need to return a document-node 
>>> from the transform.
>>>
>>> It should be possible to wrap the binary output you want into a document 
>>> node though.
>>>
>>> Charles
>>>
>>>
>>> constructor
>>> On 04/04/2013 07:32 AM, Steiner, David J. (LNG-DAY) wrote:
>>> Trying to do the following:
>>> curl --anyauth --user id:pass -X PUT -d@"./createPDF.xqy" -H "Content-type: 
>>> application/xquery" 'http://ilabsmltest:8011/v1/config/transforms/createPDF'
>>>
>>> And getting the error:
>>> <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/>
>>> <rapi:message>500 Internal Server Error internal 
>>> error</rapi:message> </rapi:error>
>>>
>>> The following works from QConsole:
>>> xquery version "1.0-ml";
>>> import module namespace jam = "http://xqdev.com/jam"; at "jam.xqy"; 
>>> import module namespace jamu = "http://xqdev.com/jam-utils"; at 
>>> "jam-utils.xqy";
>>>
>>> let $xslfoDoc :=  [xsl-fo deleted]
>>> return
>>> (jam:start("http://ilabsmltest:8080/mljam/mljam";, "mljam", 
>>> "secret"), jamu:fop($xslfoDoc),
>>> jam:end())
>>>
>>> So, I'm trying to make a XQuery transformation module out of it :
>>> xquery version "1.0-ml";
>>>
>>> module namespace cpdf =
>>> "http://marklogic.com/rest-api/transform/createPDF";;
>>>
>>> import module namespace jam = "http://xqdev.com/jam"; at "jam.xqy"; 
>>> import module namespace jamu = "http://xqdev.com/jam-utils"; at 
>>> "jam-utils.xqy";
>>>
>>> declare function cpdf:transform(
>>>   $context as map:map,
>>>   $params as map:map,
>>>   $content as document-node()
>>> ) as binary()
>>> {
>>>   if (fn:empty($content/*)) then $content  else 
>>> (jam:start("http://ilabsmltest:8080/mljam/mljam";, "mljam", 
>>> "secret"), jamu:fop($content),
>>> jam:end())
>>> };
>>>
>>>
>>> I'm assuming that there's just something wrong with the imports... and/or 
>>> namespacing...
>>> And not that I can't return a binary() instead of a document-node().
>>>
>>>
>>> Thanks,
>>> David
>>>
>>>
>>>
>>>
>>>
>>> _______________________________________________
>>> General mailing list
>>> [email protected]
>>> http://developer.marklogic.com/mailman/listinfo/general
>>>
>>>
>>> --
>>> Charles Greer
>>> Senior Engineer
>>> MarkLogic Corporation
>>> [email protected]
>>> Phone: +1 707 408 3277
>>> www.marklogic.com
>>> _______________________________________________
>>> General mailing list
>>> [email protected]
>>> http://developer.marklogic.com/mailman/listinfo/general
>> _______________________________________________
>> General mailing list
>> [email protected]
>> http://developer.marklogic.com/mailman/listinfo/general
>> _______________________________________________
>> General mailing list
>> [email protected]
>> http://developer.marklogic.com/mailman/listinfo/general
>>
> _______________________________________________
> General mailing list
> [email protected]
> http://developer.marklogic.com/mailman/listinfo/general
> _______________________________________________
> General mailing list
> [email protected]
> http://developer.marklogic.com/mailman/listinfo/general

--
Charles Greer
Senior Engineer
MarkLogic Corporation
[email protected]
Phone: +1 707 408 3277
www.marklogic.com

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

Reply via email to