It looks like there's a transform() function that's expecting an $xslfo to be 
an element, but is getting a document-node. I don't see an $xslfo in the code 
you supplied, but maybe cpdf:fop($content) needs to be cpdf:fop($content/*) 
instead?

XDMP-AS: (err:XPTY0004) $xslfo as element() -- Invalid coercion: 
document{<fo:root xml
ns:casesum="http://www.lexisnexis.com/xmlschemas/content/legal/case-summary/...";
 xmlns:caseinfo="http://www.lexisnexis.com/xmlschemas/content/legal/case-info
rmat..." xmlns:lncr="http://www.lexis-nexis.com/lncr"; 
xmlns:fo="http://www.w3.org/1999/XSL/Format"><fo:layout-master-set><fo:simple-page-master
 master-name="Letter...</fo:root>} as element()

2013-04-05 14:35:49.504 Info: DocumentsREST:   <error:stack>
2013-04-05 14:35:49.504 Info: DocumentsREST:     <error:frame>
2013-04-05 14:35:49.504 Info: DocumentsREST:       
<error:uri>/marklogic.rest.transform/createPDF/lib/transform.xqy</error:uri>
2013-04-05 14:35:49.504 Info: DocumentsREST:       <error:line>1</error:line>
2013-04-05 14:35:49.504 Info: DocumentsREST:       
<error:column>12178</error:column>
2013-04-05 14:35:49.504 Info: DocumentsREST:       
<error:operation>xdmp:function(fn:QName("http://marklogic.com/rest-api/transform/createPDF";,
 "transform"))
(map:map(&lt;map:map xmlns:xs="http://www.w3.org/2001/XMLSchema"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xmlns:map="http://marklogic.com/xdmp/map"&gt;&lt;map:entry 
key="input-type"&gt;&lt;map:value 
xsi:type="xs:string"&gt;text...&lt;/map:map&gt;), map:map(), 
document{&lt;fo:root 
xmlns:casesum="http://www.lexisnexis.com/xmlschemas/content/legal/case-summary/...";
 
xmlns:caseinfo="http://www.lexisnexis.com/xmlschemas/content/legal/case-informat...";
 xmlns:ln
cr="http://www.lexis-nexis.com/lncr"; 
xmlns:fo="http://www.w3.org/1999/XSL/Format"&gt;&lt;fo:layout-master-set&gt;&lt;fo:simple-page-master
 master-name="Letter...&lt;/fo:root&gt;})</error:operation>
2013-04-05 14:35:49.504 Info: DocumentsREST:       
<error:xquery-version>1.0-ml</error:xquery-version>
2013-04-05 14:35:49.504 Info: DocumentsREST:     </error:frame>

-- Mike

On 5 Apr 2013, at 11:54 , "Steiner, David J. (LNG-DAY)" 
<[email protected]> wrote:

> OK, so I've gone the painstaking other way and that is to include all 
> functions from the two libraries into one module.
> So, the transform actually loads now.
> 
> However, when I try to run it, I get a new error: Invalid coercion.
> 2013-04-05 14:35:49.504 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-05 14:35:49.504 Info: DocumentsREST:   
> <error:code>XDMP-AS</error:code>
> 2013-04-05 14:35:49.504 Info: DocumentsREST:   
> <error:name>err:XPTY0004</error:name>
> 2013-04-05 14:35:49.504 Info: DocumentsREST:   
> <error:xquery-version>1.0-ml</error:xquery-version>
> 2013-04-05 14:35:49.504 Info: DocumentsREST:   <error:message>Invalid 
> coercion</error:message>
> 2013-04-05 14:35:49.504 Info: DocumentsREST:   <error:format-string>XDMP-AS: 
> (err:XPTY0004) $xslfo as element() -- Invalid coercion: document{&lt;fo:root 
> xml
> ns:casesum="http://www.lexisnexis.com/xmlschemas/content/legal/case-summary/...";
>  xmlns:caseinfo="http://www.lexisnexis.com/xmlschemas/content/legal/case-info
> rmat..." xmlns:lncr="http://www.lexis-nexis.com/lncr"; 
> xmlns:fo="http://www.w3.org/1999/XSL/Format"&gt;&lt;fo:layout-master-set&gt;&lt;fo:simple-page-master
>  m
> aster-name="Letter...&lt;/fo:root&gt;} as element()</error:format-string>
> 2013-04-05 14:35:49.504 Info: DocumentsREST:   
> <error:retryable>false</error:retryable>
> 2013-04-05 14:35:49.504 Info: DocumentsREST:   <error:expr>$xslfo as 
> element()</error:expr>
> ...
> Full error message attached.
> 
> 
> This is my transform function:
> 
> 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 {
> (cpdf:start("http://ilabsmltest:8080/mljam/mljam";, "mljam", "secret"),
> cpdf:fop($content),
> cpdf:end())
>      })
> };
> 
> 
> So, maybe I just don't know enough about putting out a PDF in a web Browser...
> 
> I simply want to call this (my default transformation converts XML to XSL-FO, 
> then the transform converts XSL-FO to PDF):
> http://localhost:8011/v1/documents?uri=/document.xml&transform=createPDF
> 
> And have a PDF open in a viewer...
> Note: I am not a web app developer, so please forgive me if this is an 
> obvious answer...
> 
> This (the steps in the function above - cpdf:fop) seems to work in QConsole, 
> as I've said - I get a bunch of "stuff" in the window that looks like this:
> %PDF-1.4
> %����
> 4 0 obj
> <<
> /Producer (Apache FOP Version 0.93)
> /CreationDate (D:20130405143221-04'0-480')
>>> 
> endobj
> 5 0 obj
> << /N 3
> /Length 10 0 R
> /Filter /FlateDecode 
>>> 
> stream
> x���wTS��Ͻ7�P����khRH...
> 
> So I was just assuming that if I could get it to come out in a browser that 
> it'd come out as a PDF.
> 
> Do I have to do something like change the MIME type of the response somehow?
> 
> Thanks,
> David
> 
> 
> -----Original Message-----
> From: [email protected] 
> [mailto:[email protected]] On Behalf Of Steiner, David 
> J. (LNG-DAY)
> Sent: Friday, April 05, 2013 9:16 AM
> To: [email protected]
> Subject: Re: [MarkLogic Dev General] Probably doing something stupid... - 
> using modules in REST transform
> 
> 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
> <mlErrorInvalidCoercion.txt>_______________________________________________
> 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