2016-06-14 1 views
0

Hey les gars: Je suis vraiment bloqué sur celui-ci. J'ai une application Grails qui utilise un service REST. Cela fonctionne très bien pour accéder au service REST, mais le problème est lorsque je veux afficher les résultats dans un GSP. Je reçois l'erreur suivante:Grails erreur Null Pointer Exception accède GSP

errors.GrailsExceptionResolver - NullPointerException occurred when processing request: [GET] /TestAPI/login/index 
Stacktrace follows: 
java.lang.NullPointerException 
    at grails.plugin.cache.web.filter.PageFragmentCachingFilter.doFilter(PageFragmentCachingFilter.java:198) 
    at grails.plugin.cache.web.filter.AbstractFilter.doFilter(AbstractFilter.java:63) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 

Voici mes questions: 1. Je suis en train d'envoyer la sortie à un autre SGP et non l'indice. 2. J'ai lu la trace de la pile et dans mon projet, j'ai index.gsp dans ce chemin qu'il dit ne pas trouver.

Voici mon code de commande:

package testapi 

import org.springframework.http.HttpEntity 
import org.springframework.http.HttpHeaders 
import org.springframework.http.client.support.HttpAccessor 
import org.springframework.web.client.RestTemplate 
import org.springframework.http.HttpMethod; 
import org.springframework.stereotype.Component; 

import groovyx.net.http.* 

import java.util.Base64; 
import java.util.Map; 


//import org.springframework.web.client.RestTemplate; 

class LoginController { 

    def index() 
    { 
     String usernm = "xxxxxxxxxx"; 
     String link = "https://xxx.xxx.xxx/oauth2/token"; 
     String passwd = "yyyyyy"; 
     //Base64.encodeBase64(usernm.concat(":".concat(passwd)).getBytes()) 
     Base64.getEncoder().encode(usernm.concat(":".concat(passwd)).getBytes()); 
     String base64UserCreds = new String(Base64.getEncoder().encode(usernm.concat(":".concat(passwd)).getBytes())); 

     RestTemplate restTemplate = new RestTemplate(); 

     HttpHeaders requestHeaders = new HttpHeaders(); 
     requestHeaders.add("Authorization","Basic ".concat(base64UserCreds)); 

     HttpEntity<String> request = new HttpEntity<>(requestHeaders); 

     System.out.println ("URI under Test is: " + String.valueOf(link) + ". \n" + "Please stand by for results ... \n \n "); 
     System.out.println ("Base 64 encoded string is: " + base64UserCreds); 

     @SuppressWarnings("rawtypes") 
     Map result = restTemplate.exchange(link, HttpMethod.POST, request, Map.class).getBody(); 

     String authtype = (String) result.get("tokenType"); 
     String tokenaccess = (String) result.get("accessToken"); 
     //PrintStream testOutput = null; 
     //testOutput.append(result2); 
     System.out.println("Access token: " + tokenaccess + "\n"); 

     HttpHeaders requestHeaders2 = new HttpHeaders(); 
     requestHeaders2.add("zzzz-pppp-oauth-scope", "zzz:read-any"); 
     requestHeaders2.add("Authorization","Bearer ".concat(tokenaccess)); 
     HttpEntity<String> request2 = new HttpEntity<>(requestHeaders2); 
     System.out.println("URI #1 under test: https://xxxx.xxxx.xxxx?expand=reps \n"); 
     String result3 = restTemplate.exchange("https://xxxx.xxxx.xxxx?expand=reps", HttpMethod.GET, request2, String.class).getBody(); 
     [result3] 
     render(view: "api_test", model:[name: result3]) 
     System.out.println(result3); 

    } 
} 

Et voici le gsp:

<%@ page contentType="text/html;charset=UTF-8" %> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> 
<meta name="layout" content="main"/> 
<title>AutoTest - API</title> 
</head> 
<body> 
    <div class="body"> 

    API Results ${result3} 

    </div> 
</body> 
</html> 

NOTE: Je n'ai pas un fichier de classe de domaine; Ai-je besoin d'un si oui - s'il vous plaît me conseiller comment le structurer.

Merci.

REMARQUE: l'ajout d'une image de la structure de répertoire du projet:

grails project directory structure

+0

Essayé 'API Résultats $ {nom } '? –

+0

@tim_yates il lance l'erreur sam. – ironmantis7x

+0

@ ironmantis7x vous n'avez pas besoin d'une classe de domaine pour que le contrôleur affiche gsp. La suggestion de Tim devrait fonctionner. Je suggère de ne pas démarrer l'application de la variable dans le modèle est name: result3 donc cela devrait être $ {name} – Vahid

Répondre

1

rendu result3 ne rendra pas une vue mais le contenu de result3, de sorte que la réponse JSON est pas bizarre.

si vous pouvez poster vos noms de fichiers avec des répertoires de « Grails-app » on peut voir le problème (par exemple « /grails-app/views/login/api_test.gsp »)

+0
+0

Comment télécharger une image? J'ai pris une capture d'écran de mon répertoire de projet – ironmantis7x

+0

J'ai ajouté une image avec la structure du fichier répertoire – ironmantis7x