Exemples : Exemples de fragments de code et d'utilisation pour la liaison locale REST

Le point d'entrée de la liaison locale se trouve dans la balise RESTTag. Toutefois, il est possible d'interagir davantage avec lui en reproduisant les mêmes paramètres et en appelant les mêmes méthodes requises pour une requête de liaison contraignante. Les exemples suivants peuvent être utilisés pour effectuer des appels de liaison locaux ou distants avec une requête servletRequest.
  • Exemple d'extraction de toutes les valeurs de configuration requises pour la liaison locale :
    Le fragment suivant doit être initialisé pour récupérer la configuration de liaison locale :
    
    /**	
     * The configuration file given the current component ID
     */
    private static final ComponentConfiguration CONFIG = ComponentConfigurationRegistry.instance().getComponentConfiguration(COMPONENT_ID);
    
    /**
     * This String will be set with the configuration file's property for Local Binding's enablement.
     */
    private static final boolean LOCAL_BINDING_ENABLED = Boolean.valueOf(CONFIG.getValueByConfigGroupingNameAndPropertyName(REST_LOCALBINDING_CONFIGURATION_GROUP_NAME, LOCALBINDING_ENABLED_PROPERTY_NAME));
    
    /**
     * This Array will be set with the configuration file's property for Local Binding's url path prefix.
     */
    public static final String[] LOCAL_BINDING_PROPERTY_NAME_PATH = CONFIG.getValueByConfigGroupingNameAndPropertyName(REST_LOCALBINDING_CONFIGURATION_GROUP_NAME, RestProviderConstants.LOCALBINDING_PATH_PREFIX_PROPERTY_NAME).split(",");
    
    /**
     * This String will be set with the request's url path prefix.
     */
    public static String localBindingPathPrefix = null;
    
  • Exemple permettant de déterminer si le chemin du contexte est utilisé pour la liaison locale :
    La vérification du préfixe de chemin d'accès est nécessaire pour déterminer si le chemin d'accès du contexte d'une requête est utilisé pour la liaison locale :
    
    boolean pathPrefixFound = false;	
    if (LOCAL_BINDING_ENABLED) {
        URL aURL = new URL(h.getUrl());
        for (String paths : LOCAL_BINDING_PROPERTY_NAME_PATH) {
            if (aURL.getPath().startsWith(paths)) {
                pathPrefixFound = true; 
                localBindingPathPrefix = paths;
                break;
            }
        }
    }   
    
  • Exemple d'appel à RESTHandler.executeLocal avec requête, réponse et mappe params. La mappe params est facultative et une mappe vide est utilisée si aucune n'est transmise. La valeur resultValue est récupérée à partir de l'attribut de requête :
    
    if (LOCAL_BINDING_ENABLED && pathPrefixFound) {	
        try {
            pageContext.getRequest().setAttribute(RestProviderConstants.LOCALBINDING_PATH_PREFIX_PROPERTY_NAME, localBindingPathPrefix);
            InternalHttpServletRequestWrapper o = h.executeLocal(pageContext.getRequest(), pageContext.getResponse(), params);
            if (o.getAttribute(RestProviderConstants.LOCALBINDING_RESPONSE_STATUS_CODE).equals(HTTP_CODE_200)) {
                resultValue = o.getAttribute(RestProviderConstants.LOCAL_BINDING_RESPONSE);
                if (!(resultValue instanceof JSONObject)) {
                    resultValue = new JSONObject(o.getAttribute(RestProviderConstants.LOCAL_BINDING_RESPONSE));
                }
                resultValue = instrumentResult(resultValue, h, metric );
                pageContext.setAttribute(var, resultValue, scope);
                pageContext.setAttribute(headerSig, resultValue, scope);
            }
        }  catch (Exception e) {
            if (entryExitTraceEnabled) {
                LOGGER.exiting(CLASSNAME, METHODNAME, e);
            }
            throw new JspException(e);
        }
    } 
    
  • Exemple d'appel à RESTHandler.executeLocal avec requête et réponse. Aucune mappe params n'est fournie. Une mappe vide est donc créée :
    
    RESTHandler restHandler = new RESTHandler();	
    if (LOCAL_BINDING_ENABLED && pathPrefixFound) {
        pageContext.getRequest().setAttribute(RestProviderConstants.LOCALBINDING_PATH_PREFIX_PROPERTY_NAME, localBindingPathPrefix);
        InternalHttpServletRequestWrapper requestWrapper = restHandler.executeLocal(request, response);
        result = toJSONObject(requestWrapper.getAttribute(RestProviderConstants.LOCAL_BINDING_RESPONSE));
    } else {
        HttpObj httpObj = restHandler.execute();
        result = toJSONObject(httpObj.getResponseAsString());
    }