2016-06-14 10 views
0

Hey Leute: Ich bin wirklich auf diesem fest.Grails Fehler Null Pointer Exception greift auf GSP

Ich habe eine Grails-App, die einen REST-Service verwendet. Es funktioniert gut für den Zugriff auf den REST-Service, aber das Problem ist, wenn ich die Ergebnisse in einem GSP rendern möchte. Ich erhalte den folgenden Fehler:

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) 

Hier sind meine Fragen: 1. Ich versuche, die Ausgabe an einen anderen APS zu senden und nicht Index. 2. Ich lese den Stack-Trace und in meinem Projekt habe ich index.gsp in diesem Pfad, den es sagt, dass es nicht finden kann.

Hier ist mein Controller-Code:

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); 

    } 
} 

Und hier ist der 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> 

HINWEIS: Ich habe keine Domain-Klasse-Datei; Brauche ich einen, wenn es so ist - bitte rate mir, wie ich es strukturiere.

Danke.

Hinweis: Das Hinzufügen eines Bildes der Verzeichnisstruktur des Projektes:

grails project directory structure

+0

$ Versuchte 'API Ergebnisse {name } '? –

+0

@tim_yates es wirft den Sam Fehler. – ironmantis7x

+0

@ ironmantis7x Sie brauchen keine Domain-Klasse, um den Controller zur Anzeige von gsp zu bekommen. Tims Vorschlag sollte funktionieren. Ich würde vorschlagen, das Anfangen zu stoppen, die Variable im Modell ist Name: result3, also sollte das sein $ {Name} – Vahid

Antwort

1

macht result3 keinen Blick machen, sondern den Inhalt von result3, so dass die Json Antwort nicht komisch ist.

, wenn Sie Ihre Dateinamen mit Verzeichnissen von 'Grails-app' veröffentlichen könnten wir vielleicht das Problem sehen (zB '/grails-app/views/login/api_test.gsp')

+0
+0

Wie lade ich ein Bild hoch? Ich habe einen Screenshot meines Projektverzeichnisses gemacht – ironmantis7x

+0

Ich habe ein Bild mit der Verzeichnisdateistruktur hinzugefügt – ironmantis7x

Verwandte Themen