Show
Ignore:
Timestamp:
14-10-10 19:56:10 (4 years ago)
Author:
j.saito@…
Message:

Removed three possible sources for null-pointer exceptions in the CommunicationManager?.

Added a simpel way of handling REST errors using a new RestException? class.

I have tried to introduce Exception handling for errors in the Communication manager. So far, I only committed exceptions for something going wrong. I have been working on a more fine grained distinction between server side errors and client side errors related to REST. however, these errors require some sort of convention for delivering from the server side to the client side. Therefore, they require a convention to be agreed to by NMCDSP and I have not committed these Exceptions.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • src/groovy/dbnp/rest/common/CommunicationManager.groovy

    r136 r146  
    11package dbnp.rest.common 
    22 
     3import dbnp.rest.* 
    34import grails.converters.JSON 
    45import java.net.URLEncoder 
     
    4546            conn.setRequestProperty("Authorization", "Basic ${authString}") 
    4647            return JSON.parse( conn.content.text ) 
    47             //return conn.content.text 
    48                 //return JSON.parse( url.newReader() ) 
    4948    } 
    5049 
     
    111110 
    112111    public static addRestWrapper( serverURL, restName, params = [], closure = { return it } ) { 
    113                 CommunicationManager.metaClass.registerStaticMethod( restName ) { Object [] strangeGroovyArgs -> 
    114                         def map = [:] 
    115                     def args = strangeGroovyArgs[0]        // groovy nests the parameters of the methods in some other array 
    116                         if(params.size > 0 ) 
    117                         { 
    118                                 for( i in 0..(params.size-1) ) { 
    119                                         def param = params[i] 
    120                                         map[param] = args[i] 
     112                def result 
     113                try { 
     114                        CommunicationManager.metaClass.registerStaticMethod( restName ) { Object [] strangeGroovyArgs -> 
     115                                def map = [:] 
     116                            def args = strangeGroovyArgs[0]        // groovy nests the parameters of the methods in some other array 
     117                                if(params.size > 0 ) 
     118                                { 
     119                                        for( i in 0..(params.size-1) ) { 
     120                                                def param = params[i] 
     121                                                map[param] = args[i] 
     122                                        } 
    121123                                } 
    122                         } 
    123                         return closure( getRestResource( serverURL, restName, map ) ) 
    124                 } 
     124                                result = closure( getRestResource( serverURL, restName, map ) ) 
     125                        }  
     126                } catch ( Exception e ) { result = RestException.getErrorObject()  } 
     127                return result 
    125128        } 
    126129 
     
    253256                addRestWrapper( url+'/rest', 'getQueryResultWithOperator',  ['query','operator','value'], closure2 ) 
    254257 
    255  
    256258        } 
    257259         
     260 
     261 
     262    /** 
     263     * Give list of missing parameters for a parameter call in a RestController. 
     264     *   
     265     * @params params Map params        The parameter list required by this view. 
     266     * @params requiredParamers                 List of parameter names that must be provided 
     267     * @return true, if params has all required parameters, an error hash otherwise 
     268     */   
     269        static String hasValidParams( params, render, Object [] requiredParams ) { 
     270                def list = [] 
     271                requiredParams.each { p -> 
     272                        if( !params[p] ) list.push p 
     273                } 
     274                if(list.size()<=0) { return true } 
     275                render( ['error':list] ) 
     276                return false  // return erro object 
     277        } 
     278 
     279 
    258280}