Thanks for the heads-up. I used the wrong encoding to test the try-catch block. I'm seeing some other errors my testing as well.
Interestingly enough the documentation for the try-catch block uses xmp:document-load for the example: http://developer.marklogic.com:8040/4.1doc/docapp.xqy#display.xqy?fname=http ://pubs/4.1doc/xml/xquery/enhanced.xml%2334280 Tim _____ From: [email protected] [mailto:[email protected]] On Behalf Of Danny Sokolsky Sent: Tuesday, July 06, 2010 4:50 PM To: General Mark Logic Developer Discussion Subject: Re: [MarkLogic Dev General] try-catch block seemingly notworking with xdmp:document-load() error Hi Tim, You should be able to do the same thing you were doing with document-load with document-get + document-insert, it will just be an extra line or 2 of code. It should be roughly the same amount of work for MarkLogic, too, as that is essentially what xdmp:document-load does. Something like; let $uri := "some-uri" let $node := try{ xdmp:document-get( .....rest of code here.... } catch ($e) { ...do something here... } return xdmp:document-insert($uri, $node) As to why document-load cannot catch the exception, I am not 100% sure. It might be a bug or there might be some reason it works that way, maybe because the document-load call does not see the error until commit time when it is too late to catch. I filed a bug on the MarkLogic end to sort that out. But the workaround should be OK I think, and might actually be preferable as it catches the problem earlier. In the catch, for example, you can try another encoding. Depending on your content, trying ISO-8859-1 for the encoding when it fails UTF-8 might solve the problem for some significant % of your data (if you are lucky....). -Danny From: [email protected] [mailto:[email protected]] On Behalf Of Tim Meagher Sent: Tuesday, July 06, 2010 1:34 PM To: 'General Mark Logic Developer Discussion' Subject: Re: [MarkLogic Dev General] try-catch block seemingly not working with xdmp:document-load() error Hi Danny, Interesting - I tested it with xdmp:document-get and it successfully catches the error. I wrap the call to xdmp:document-load in an http application and feed it the necessary options via an HTTP Post, so the advantage of using xdmp:document-load is that I can invoke it via HTTP from an XCC app without having to obtain and then rewrite the content using document-insert. It would be much more advantageous if xdmp:document-load trapped the error, but I suppose I can add a test using xdmp-document-get as a prerequisite just to trap such errors prior to invoking xdmp:document-load. What would it take for MarkLogic to trap this error in xdmp:document-load? Is this a bug? Thanks! Tim _____ From: [email protected] [mailto:[email protected]] On Behalf Of Danny Sokolsky Sent: Tuesday, July 06, 2010 4:18 PM To: General Mark Logic Developer Discussion Subject: Re: [MarkLogic Dev General] try-catch block seemingly not working with xdmp:document-load() error Hi Tim, I'm not sure if this will help, but that error appears to be catchable in xdmp:document-get, so you should be able to do this using xdmp:document-get instead. The combination of xdmp:document-get + xdmp:document-insert is pretty much the same as xdmp:document-load. -Danny From: [email protected] [mailto:[email protected]] On Behalf Of Tim Meagher Sent: Tuesday, July 06, 2010 12:57 PM To: 'General Mark Logic Developer Discussion' Subject: [MarkLogic Dev General] try-catch block seemingly not working with xdmp:document-load() error Hi Folks, I wrapped an xdmp:document-load() in a try-catch block but it doesn't catch the error and allow me to take corrective action. I experimented with it in cq and still get an error, for example, given the following query: try { let $uri := "/base-uri/docname.xml" let $url := "http://[server]/[docpath]/docname.xml" let $options := <options xmlns="xdmp:document-load" > <uri>{$uri}</uri> </options> let $properties := <properties> <datetime>2010-07-06-04:00</datetime> </properties> return xdmp:document-load($url, $options) } catch($e) { "Problem loading file, received the following exception: ", $e } The result is as follows: query evaluated in fabrication at Modules:/ as 1.0-ml (cq v4.1-1) [1.0-ml] XDMP-DOCUTF8SEQ: xdmp:eval("try { let $uri := ":/base-uri/...", (), <options xmlns="xdmp:eval"><database>10474121819804666683</database><modules>15178358 166571...</options>) -- Invalid UTF-8 escape sequence at http://[server]/[docpath]/docname.xml line 68 -- document is not UTF-8 encoded Stack trace: in /eval.xqy line 111: I expected the error to begin with: "Problem loading file, received the following exception: " Tim Meagher
_______________________________________________ General mailing list [email protected] http://developer.marklogic.com/mailman/listinfo/general
