Ignore:
Timestamp:
17/04/07 17:03:28 (13 years ago)
Author:
mpritcha
Message:

Better error handling in PresentAgent?.java. Now allows individual docs to fail gracefully.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • TI01-discovery/trunk/ws-Discovery2/src/ndg/services/discovery/PresentAgent.java

    r2373 r2416  
    3131        // Output holder 
    3232        Vector returnDocs; 
     33        Vector failedDocs = new Vector(); 
    3334 
    3435        /** 
     
    122123                                        queryParams.addElement( docSearchOptions ); 
    123124 
    124                                         byte[] resultByteArray = (byte[])xmlrpc.execute( "query", queryParams ); 
    125                                         ByteArrayInputStream resultStream = new ByteArrayInputStream( resultByteArray ); 
    126  
    127                                         SAXBuilder builder = new SAXBuilder(); 
    128                                         org.jdom.Document doc = builder.build( resultStream ); 
    129                                         org.jdom.Element root = doc.getRootElement(); 
    130  
    131                                         org.jdom.Element document = root.getChild("document"); 
    132                                         org.jdom.Element collection = document.getChild("collection"); 
    133                                         org.jdom.Element content = document.getChild("content"); 
    134  
    135                                         // Determine which subcollection of /db/discovery/original/FORMAT this doc belongs to and apply appropriate namespace for extraction of content 
    136                                         String[] collectionParts = collection.getTextTrim().split("/"); 
    137                                         String thisFormat = collectionParts[4]; 
    138                                          
    139                                         String namespaceURI = properties.getProperty("namespace." + thisFormat); 
    140                                         String rootElement = properties.getProperty("rootElement." + thisFormat); 
    141                                         String namespacePrefix = properties.getProperty("namespacePrefix." + thisFormat); 
    142  
    143                                         if ( content != null ) 
    144                                         { 
    145                                                 org.jdom.Element elem = null;    
    146                                                 if ( namespacePrefix.equals("") ) 
    147                                                 { 
    148                                                         elem = content.getChild(rootElement, Namespace.getNamespace(namespaceURI) ); 
    149                                                 } 
    150                                                 else 
    151                                                 { 
    152                                                         elem = content.getChild(rootElement,  Namespace.getNamespace(namespacePrefix, namespaceURI) ); 
    153                                                 } 
    154  
    155                                                 // If this doesn't work, try & fetch it as if it belongs to no namespace 
    156                                                 if ( elem == null ) 
    157                                                 { 
    158                                                         elem = content.getChild(rootElement, Namespace.getNamespace("")); 
    159                                                 } 
    160  
    161                                                 //  Use XMLOutputter 
    162                                                 XMLOutputter out = new XMLOutputter (); 
    163                                                 out.setFormat( Format.getCompactFormat() ); // UTF-8 & trimming of whitespace 
    164                                                 returnDoc = out.outputString( elem ); 
    165  
    166                                                 if (returnDoc != null) 
    167                                                 { 
    168                                                         result.setStatus( true ); 
    169                                                         result.setStatusMessage( "Success" ); 
    170                                                         returnDocs.add( returnDoc );             
    171                                                 } 
    172                                         } 
    173                                         else 
    174                                         { 
    175                                                 throw new Exception("Unable to retrieve original format document"); 
     125                                        try 
     126                                        { 
     127                                                byte[] resultByteArray = (byte[])xmlrpc.execute( "query", queryParams ); 
     128                                                ByteArrayInputStream resultStream = new ByteArrayInputStream( resultByteArray ); 
     129 
     130                                                SAXBuilder builder = new SAXBuilder(); 
     131                                                org.jdom.Document doc = builder.build( resultStream ); 
     132                                                org.jdom.Element root = doc.getRootElement(); 
     133 
     134                                                org.jdom.Element document = root.getChild("document"); 
     135                                                org.jdom.Element collection = document.getChild("collection"); 
     136                                                org.jdom.Element content = document.getChild("content"); 
     137 
     138                                                // Determine which subcollection of /db/discovery/original/FORMAT this doc belongs to and apply appropriate namespace for extraction of content 
     139                                                String[] collectionParts = collection.getTextTrim().split("/"); 
     140                                                String thisFormat = collectionParts[4]; 
     141                                                 
     142                                                String namespaceURI = properties.getProperty("namespace." + thisFormat); 
     143                                                String rootElement = properties.getProperty("rootElement." + thisFormat); 
     144                                                String namespacePrefix = properties.getProperty("namespacePrefix." + thisFormat); 
     145 
     146                                                if ( content != null ) 
     147                                                { 
     148                                                        org.jdom.Element elem = null;    
     149                                                        if ( namespacePrefix.equals("") ) 
     150                                                        { 
     151                                                                elem = content.getChild(rootElement, Namespace.getNamespace(namespaceURI) ); 
     152                                                        } 
     153                                                        else 
     154                                                        { 
     155                                                                elem = content.getChild(rootElement,  Namespace.getNamespace(namespacePrefix, namespaceURI) ); 
     156                                                        } 
     157 
     158                                                        // If this doesn't work, try & fetch it as if it belongs to no namespace 
     159                                                        if ( elem == null ) 
     160                                                        { 
     161                                                                elem = content.getChild(rootElement, Namespace.getNamespace("")); 
     162                                                        } 
     163 
     164                                                        //  Use XMLOutputter 
     165                                                        XMLOutputter out = new XMLOutputter (); 
     166                                                        out.setFormat( Format.getCompactFormat() ); // UTF-8 & trimming of whitespace 
     167                                                        returnDoc = out.outputString( elem ); 
     168 
     169                                                        if (returnDoc != null) 
     170                                                        { 
     171                                                                returnDocs.add( returnDoc );             
     172                                                        } 
     173                                                } 
     174                                                 
     175                                        } 
     176                                        catch ( java.lang.NullPointerException e) 
     177                                        { 
     178                                                        // Catch failure for this individual document 
     179                                                        returnDocs.add( "" ); 
     180                                                        failedDocs.add(thisdoc); 
    176181                                        }                                                
    177182 
     
    193198                                        queryParams.addElement( docSearchOptions ); 
    194199 
    195                                         byte[] resultByteArray = (byte[])xmlrpc.execute( "query", queryParams ); 
    196                                         //System.out.println( new String(resultByteArray) ); 
    197                                         ByteArrayInputStream resultStream = new ByteArrayInputStream( resultByteArray ); 
    198  
    199                                         SAXBuilder builder = new SAXBuilder(); 
    200                                         org.jdom.Document doc = builder.build( resultStream ); 
    201                                         org.jdom.Element root = doc.getRootElement(); 
    202                                         org.jdom.Element container = root.getChild("container", Namespace.getNamespace("dummy","http://ndg.nerc.ac.uk/dummy")); 
    203                                         org.jdom.Element elem = container.getChild(properties.getProperty("rootElement.DC"), Namespace.getNamespace(properties.getProperty("namespacePrefix.DC"), "http://www.openarchives.org/OAI/2.0/oai_dc/") ); 
    204  
    205                                         //  Use XMLOutputter 
    206                                         XMLOutputter out = new XMLOutputter (); 
    207                                         out.setFormat( Format.getCompactFormat() ); // UTF-8 & trimming of whitespace 
    208                                         returnDoc = out.outputString( elem ); 
    209  
    210                                         if (returnDoc != null) 
    211                                         { 
    212                                                 result.setStatus( true ); 
    213                                                 result.setStatusMessage( "Success" ); 
    214                                                 returnDocs.add( returnDoc );             
    215                                         } 
    216                                         else { 
    217                                                 throw new Exception("Unable to create DC format document"); 
    218                                         }                                                
     200                                        try 
     201                                        { 
     202                                                byte[] resultByteArray = (byte[])xmlrpc.execute( "query", queryParams ); 
     203                                                //System.out.println( new String(resultByteArray) ); 
     204                                                ByteArrayInputStream resultStream = new ByteArrayInputStream( resultByteArray ); 
     205 
     206                                                SAXBuilder builder = new SAXBuilder(); 
     207                                                org.jdom.Document doc = builder.build( resultStream ); 
     208                                                org.jdom.Element root = doc.getRootElement(); 
     209                                                org.jdom.Element container = root.getChild("container", Namespace.getNamespace("dummy","http://ndg.nerc.ac.uk/dummy")); 
     210                                                org.jdom.Element elem = container.getChild(properties.getProperty("rootElement.DC"), Namespace.getNamespace(properties.getProperty("namespacePrefix.DC"), "http://www.openarchives.org/OAI/2.0/oai_dc/") ); 
     211                                                // If this doesn't work, try & fetch it as if it belongs to no namespace 
     212                                                if ( elem == null ) 
     213                                                { 
     214                                                        elem = container.getChild(properties.getProperty("rootElement.DC"),Namespace.getNamespace(properties.getProperty("namespacePrefix.DC"),"")); 
     215                                                } 
     216 
     217                                                //  Use XMLOutputter 
     218                                                XMLOutputter out = new XMLOutputter (); 
     219                                                out.setFormat( Format.getCompactFormat() ); // UTF-8 & trimming of whitespace 
     220                                                returnDoc = out.outputString( elem ); 
     221 
     222                                                if (returnDoc != null) 
     223                                                { 
     224                                                        returnDocs.add( returnDoc );             
     225                                                } 
     226                                                 
     227                                        } 
     228                                        catch ( java.lang.NullPointerException e) 
     229                                        { 
     230                                                        // Catch failure for this individual document 
     231                                                        returnDocs.add( "" ); 
     232                                                        failedDocs.add(thisdoc); 
     233                                        } 
     234                                                 
    219235                                } 
    220236                                else if ( this.format.equals("DIF") ) 
    221237                                { 
     238 
    222239                                        Vector queryParams = new Vector(); 
    223240                                        // Implements revision #2358 of TI07-MOLES/trunk/DIF/XQuery/NDG-MDIP.xquery 
     
    233250                                        queryParams.addElement( docSearchOptions ); 
    234251 
    235                                         byte[] resultByteArray = (byte[])xmlrpc.execute( "query", queryParams ); 
    236                                         ByteArrayInputStream resultStream = new ByteArrayInputStream( resultByteArray ); 
    237  
    238  
    239                                         SAXBuilder builder = new SAXBuilder(); 
    240                                         org.jdom.Document doc = builder.build( resultStream ); 
    241                                         org.jdom.Element root = doc.getRootElement(); 
    242                                         org.jdom.Element container = root.getChild("container", Namespace.getNamespace("dummy","http://ndg.nerc.ac.uk/dummy")); 
    243                                         org.jdom.Element elem = container.getChild(properties.getProperty("rootElement.DIF"), Namespace.getNamespace(properties.getProperty("namespace.DIF")) ); 
    244                                         // If this doesn't work, try & fetch it as if it belongs to no namespace 
    245                                         if ( elem == null ) 
    246                                         { 
    247                                                 elem = container.getChild(properties.getProperty("rootElement.DIF"),Namespace.getNamespace("")); 
    248                                         } 
    249  
    250                                         //  Use XMLOutputter 
    251                                         XMLOutputter out = new XMLOutputter (); 
    252                                         out.setFormat( Format.getCompactFormat() ); // UTF-8 & trimming of whitespace 
    253                                         returnDoc = out.outputString( elem ); 
    254  
    255                                         if (returnDoc != null) 
    256                                         { 
    257                                                 result.setStatus( true ); 
    258                                                 result.setStatusMessage( "Success" ); 
    259                                                 returnDocs.add( returnDoc );             
    260                                         } 
    261                                         else { 
    262                                                 throw new Exception("Unable to create DIF format document"); 
    263                                         }                                                
     252                                        try 
     253                                        { 
     254 
     255                                                byte[] resultByteArray = (byte[])xmlrpc.execute( "query", queryParams ); 
     256                                                ByteArrayInputStream resultStream = new ByteArrayInputStream( resultByteArray ); 
     257 
     258 
     259                                                SAXBuilder builder = new SAXBuilder(); 
     260                                                org.jdom.Document doc = builder.build( resultStream ); 
     261                                                org.jdom.Element root = doc.getRootElement(); 
     262                                                org.jdom.Element container = root.getChild("container", Namespace.getNamespace("dummy","http://ndg.nerc.ac.uk/dummy")); 
     263                                                org.jdom.Element elem = container.getChild(properties.getProperty("rootElement.DIF"), Namespace.getNamespace(properties.getProperty("namespace.DIF")) ); 
     264                                                // If this doesn't work, try & fetch it as if it belongs to no namespace 
     265                                                if ( elem == null ) 
     266                                                { 
     267                                                        System.out.println("Had retrieve without namespace"); 
     268                                                        elem = container.getChild(properties.getProperty("rootElement.DIF"),Namespace.getNamespace("")); 
     269                                                } 
     270 
     271                                                //  Use XMLOutputter 
     272                                                XMLOutputter out = new XMLOutputter (); 
     273                                                out.setFormat( Format.getCompactFormat() ); // UTF-8 & trimming of whitespace 
     274                                                returnDoc = out.outputString( elem ); 
     275 
     276                                                if (returnDoc != null) 
     277                                                { 
     278                                                        returnDocs.add( returnDoc );             
     279                                                } 
     280                                        } 
     281                                        catch ( java.lang.NullPointerException e) 
     282                                        { 
     283                                                        // Catch failure for this individual document 
     284                                                        returnDocs.add( "" ); 
     285                                                        failedDocs.add(thisdoc); 
     286                                        } 
    264287                                } 
    265288                                else if ( this.format.equals("MDIP") ) 
     
    269292                                        // Implements revision #2372 of TI07-MOLES/trunk/MDIP/XQueries/NDG-MDIP.xquery 
    270293                                        String xqueryStr = "import module namespace voclib='http://ndg.nerc.ac.uk/xquery/lib/vocab' at 'xmldb:exist:///db/xqueryLib/Vocabs/vocab_xquery_lib.xquery'; import module namespace utillib='http://ndg.nerc.ac.uk/xquery/lib/utilities' at 'xmldb:exist:///db/xqueryLib/Utilities/utility_xquery_lib.xquery'; declare default element namespace 'http://www.oceannet.org/mdip/xml'; declare namespace moles='http://ndg.nerc.ac.uk/moles'; declare namespace gco='http://www.isotc211.org/2005/gco'; declare namespace xsi='http://www.w3.org/2001/XMLSchema-instance';  declare namespace dummy='http://ndg.nerc.ac.uk/dummy';  declare variable $targetCollection as xs:string {'/db/discovery/moles'}; declare variable $repositoryIdentifier as xs:string {'RepositoryID'}; declare variable $localIdentifier as xs:string {'LocalID'}; declare function local:docExists($coll as xs:string, $doc as xs:string) as item()* {      let $testset := collection($coll)//root()       let $matches :=                 for $i in $testset              where util:document-name($i) = $doc             return  document-uri($i)        return $matches };  declare variable $ISO_639-2_ns as xs:string{$voclib:ISO_639-2_ns}; declare variable $ISO_3166_ns as xs:string{$voclib:ISO_3166_ns};  let $i := local:docExists('/db/discovery/original/"+this.format+"', '"+thisdoc+"') return if ( fn:empty($i) ) then ( for $DE in collection($targetCollection)/moles:dgMetadata/moles:dgMetadataRecord[         exists('moles:dgDataEntity')    and moles:dgMetadataID/moles:schemeIdentifier='NDG-B0'          ]       where util:document-name($DE)='"+thisdoc+"' return element dummy:container { element Metadata { element Title {data($DE/moles:name)}, if (exists($DE/moles:dgDataEntity/moles:dgDataSummary/moles:dgDatasetLanguage)) then for $lang in $DE/moles:dgDataEntity/moles:dgDataSummary/moles:dgDatasetLanguage return element Language{ element LanguageName {data($lang/moles:dgValidTerm)}, element LanguageVocab {data($lang/moles:dgValidTermID/moles:ParentListID)}, element LanguageCode {data($lang/moles:dgValidTermID/moles:TermID)} }  else (),  element Abstract {string($DE/moles:dgMetadataDescription/moles:abstract/moles:abstractText)}, for $isoTopic in $DE/moles:dgStructuredKeyword[voclib:spot-vocab($voclib:iso_topic_list, moles:dgValidTermID/moles:ParentListID)]  return element TopicCategory { element TopicCategoryName {data($isoTopic/moles:dgValidTerm)}, element TopicCategoryVocab {data($isoTopic/moles:dgValidTermID/moles:ParentListID)}, element TopicCategoryCode {data($isoTopic/moles:dgValidTermID/moles:TermID)} }, for $subject in ($DE/moles:dgDataEntity/moles:dgDataSummary/moles:dgParameterSummary/moles:dgStdParameterMeasured[ voclib:spot-vocab($voclib:gcmd_science_valids, moles:dgValidTermID/moles:ParentListID)  or voclib:spot-vocab($voclib:gcmd_project_valids, moles:dgValidTermID/moles:ParentListID) or voclib:spot-vocab($voclib:gcmd_science_valids_categories, moles:dgValidTermID/moles:ParentListID) or voclib:spot-vocab($voclib:bodc_parameter_usage_vocab, moles:dgValidTermID/moles:ParentListID) or voclib:spot-vocab($voclib:bodc_parameter_discovery_vocab, moles:dgValidTermID/moles:ParentListID) ])  return (element Subject { element SubjectName {data($subject/moles:dgValidTerm)}, element SubjectVocab {data($subject/moles:dgValidTermID/moles:ParentListID)}, element SubjectCode {data($subject/moles:dgValidTermID/moles:TermID)} }, for $subterm in $subject//moles:dgValidSubterm return (element Subject { element SubjectName {data($subterm/moles:dgValidTerm)}, element SubjectVocab {data($subterm/moles:dgValidTermID/moles:ParentListID)}, element SubjectCode {data($subterm/moles:dgValidTermID/moles:TermID)} } ) ), if (exists($DE//moles:dgTemporalCoverage/(moles:DateSingle | moles:DateRange))) then  element Date { element DatasetStartDate { let $dateStart:=min($DE//moles:dgTemporalCoverage/(moles:DateSingle | moles:DateRange/moles:DateRangeStart) cast as xs:date) return  if (empty($dateStart)) then ()  else data($dateStart) }, element DatasetEndDate { let $dateEnd:=max($DE//moles:dgTemporalCoverage/(moles:DateSingle | moles:DateRange/moles:DateRangeEnd) cast as xs:date) return if (empty($dateEnd)) then ()  else data($dateEnd) } } else (), let $west := min($DE/moles:dgDataEntity/moles:dgDataSummary//moles:BoundingBox/moles:LimitWest cast as xs:decimal) return element WestCoOrdinate {data($west)}, let $east := max($DE/moles:dgDataEntity/moles:dgDataSummary//moles:BoundingBox/moles:LimitEast cast as xs:decimal) return element EastCoOrdinate {data($east)}, let $north := max($DE/moles:dgDataEntity/moles:dgDataSummary//moles:BoundingBox/moles:LimitNorth cast as xs:decimal) return element NorthCoOrdinate {data($north)}, let $south := min($DE/moles:dgDataEntity/moles:dgDataSummary//moles:BoundingBox/moles:LimitSouth cast as xs:decimal) return element SouthCoOrdinate {data($south)}, element DatasetIdentifier {concat($DE/moles:dgMetadataID/moles:repositoryIdentifier, $utillib:moles_id_separator, 'MDIP', $utillib:moles_id_separator, $DE/moles:dgMetadataID/moles:localIdentifier)}, for $target in $DE/moles:dgStructuredKeyword[voclib:spot-vocab($voclib:ndg_data_provider_vocab, moles:dgValidTermID/moles:ParentListID) ] return element Target { element TargetName {data($target/moles:dgValidTerm)}, element TargetVocab {data($target/moles:dgValidTermID/moles:ParentListID)}, element TargetCode {data($target/moles:dgValidTermID/moles:TermID)} } } } ) else (         element dummy:container { doc(fn:item-at($i, 1)) } ) "; 
     294                                        System.out.println( "xquery was:\n" + xqueryStr ); 
    271295                                        queryParams.addElement( xqueryStr.getBytes("UTF-8") );  
    272296                                        queryParams.addElement( 1 ); 
     
    278302                                        docSearchOptions.put("process-xsl-pi", "no"); 
    279303                                        queryParams.addElement( docSearchOptions ); 
    280  
    281                                         byte[] resultByteArray = (byte[])xmlrpc.execute( "query", queryParams ); 
    282                                         ByteArrayInputStream resultStream = new ByteArrayInputStream( resultByteArray ); 
    283                                         //System.out.println( new String(resultByteArray) ); 
    284                                         //  Use XMLOutputter 
    285                                         XMLOutputter out = new XMLOutputter (); 
    286                                         out.setFormat( Format.getCompactFormat() ); // UTF-8 & trimming of whitespace 
    287  
    288                                         SAXBuilder builder = new SAXBuilder(); 
    289                                         org.jdom.Document doc = builder.build( resultStream ); 
    290                                         org.jdom.Element root = doc.getRootElement(); 
    291                                         org.jdom.Element container = root.getChild("container", Namespace.getNamespace("dummy","http://ndg.nerc.ac.uk/dummy")); 
    292                                         org.jdom.Element elem = container.getChild(properties.getProperty("rootElement.MDIP"), Namespace.getNamespace(properties.getProperty("namespace.MDIP"))); 
    293  
    294                                         returnDoc = out.outputString( elem ); 
    295  
    296                                         if (returnDoc != null) 
    297                                         { 
    298                                                 result.setStatus( true ); 
    299                                                 result.setStatusMessage( "Success" ); 
    300                                                 returnDocs.add( returnDoc );             
    301                                         } 
    302                                         else { 
    303                                                 throw new Exception("Unable to create MDIP format document"); 
    304                                         }                                                
     304                                        try 
     305                                        { 
     306 
     307                                                byte[] resultByteArray = (byte[])xmlrpc.execute( "query", queryParams ); 
     308 
     309                                                ByteArrayInputStream resultStream = new ByteArrayInputStream( resultByteArray ); 
     310                                                System.out.println( new String(resultByteArray) ); 
     311                                                //  Use XMLOutputter 
     312                                                XMLOutputter out = new XMLOutputter (); 
     313                                                out.setFormat( Format.getCompactFormat() ); // UTF-8 & trimming of whitespace 
     314 
     315                                                SAXBuilder builder = new SAXBuilder(); 
     316                                                org.jdom.Document doc = builder.build( resultStream ); 
     317                                                org.jdom.Element root = doc.getRootElement(); 
     318                                                org.jdom.Element container = root.getChild("container", Namespace.getNamespace("dummy","http://ndg.nerc.ac.uk/dummy")); 
     319                                                org.jdom.Element elem = container.getChild(properties.getProperty("rootElement.MDIP"), Namespace.getNamespace(properties.getProperty("namespace.MDIP"))); 
     320                                                // If this doesn't work, try & fetch it as if it belongs to no namespace 
     321                                                if ( elem == null ) 
     322                                                { 
     323                                                        elem = container.getChild(properties.getProperty("rootElement.MDIP"),Namespace.getNamespace("")); 
     324                                                } 
     325 
     326                                                 
     327                                                returnDoc = out.outputString( elem ); 
     328                                                if (returnDoc != null) 
     329                                                { 
     330                                                        returnDocs.add( returnDoc );             
     331                                                } 
     332                                        } 
     333                                        catch ( java.lang.NullPointerException e) 
     334                                        { 
     335                                                        // Catch failure for this individual document 
     336                                                        returnDocs.add( "" ); 
     337                                                        failedDocs.add(thisdoc); 
     338                                        } 
    305339                                } 
    306340                                else 
     
    309343                                } 
    310344                        } 
    311                         result.setDocuments( returnDocs ); 
     345 
     346                        if ( returnDocs.isEmpty() ) 
     347                        { 
     348                                result.setStatus(false); 
     349                                result.setStatusMessage("Error retrieving all documents"); 
     350                        } else { 
     351                                result.setStatus(true); 
     352                                result.setStatusMessage("Success"); 
     353                                result.setDocuments( returnDocs ); 
     354                        } 
     355                        if ( !failedDocs.isEmpty() ) 
     356                        { 
     357                                String failedDocMessage = " but some failed documents : "; 
     358                                Iterator failedIt = failedDocs.iterator(); 
     359                                int failedCount = 0; 
     360                                while ( failedIt.hasNext() ) 
     361                                { 
     362                                        failedDocMessage += (String)failedIt.next(); 
     363                                        if ( failedCount < (failedDocs.size()-1) ) 
     364                                        { 
     365                                                failedDocMessage += ", "; 
     366                                        } 
     367                                        failedCount++; 
     368                                } 
     369                                result.setStatusMessage( result.getStatusMessage() + failedDocMessage ); 
     370                        } 
    312371                } 
    313372                catch (Exception e) 
    314373                { 
    315374                        result.setStatus( false ); 
    316                         result.setStatusMessage( "Error retrieving document : " + e.toString() ); 
     375                        result.setStatusMessage( "Error retrieving document(s) : " + e.toString() ); 
    317376                } 
    318  
    319377 
    320378                return result; 
Note: See TracChangeset for help on using the changeset viewer.