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>15178358166571...</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