2011-09-22 16 views
0

私のコントローラにいくつかのコードがあり、私に何か不明な例外がスローされています。私はそれの真ん中にJSONを生成しようとすると、私は、次のスタックトレースを取得(それの奇妙な部分...)Grails JSON/XMLの生成に失敗しました

class FooController { 

    static allowedMethods = [save: "POST", update: "POST", delete: "POST"] 


    def xmlList = { 
     render Foo.list() as XML 
    } 

    def jsonList = { 
     render Foo.list() as JSON 
    } 
//... 
} 

::私がしようとすると、

[http-8080-2] [tenant 122] ERROR errors.GrailsExceptionResolver - Exception occurred when processing request: [GET] /project/foo/jsonList 
Stacktrace follows: 
org.codehaus.groovy.grails.web.json.JSONException: Misplaced key. 
at grails.converters.JSON.value(JSON.java:198) 
at grails.converters.JSON.convertAnother(JSON.java:161) 
at grails.converters.JSON.value(JSON.java:198) 
at grails.converters.JSON.convertAnother(JSON.java:161) 
at grails.converters.JSON.value(JSON.java:198) 
at grails.converters.JSON.convertAnother(JSON.java:161) 
at grails.converters.JSON.value(JSON.java:198) 
at grails.converters.JSON.convertAnother(JSON.java:161) 
at grails.converters.JSON.value(JSON.java:198) 
at grails.converters.JSON.convertAnother(JSON.java:161) 
at grails.converters.JSON.value(JSON.java:198) 
at grails.converters.JSON.convertAnother(JSON.java:161) 
at grails.converters.JSON.value(JSON.java:198) 
at grails.converters.JSON.convertAnother(JSON.java:161) 
at grails.converters.JSON.value(JSON.java:198) 
at grails.converters.JSON.convertAnother(JSON.java:161) 
at grails.converters.JSON.value(JSON.java:198) 
at grails.converters.JSON.convertAnother(JSON.java:161) 
at grails.converters.JSON.value(JSON.java:198) 
at grails.converters.JSON.convertAnother(JSON.java:161) 
at grails.converters.JSON.value(JSON.java:198) 
at grails.converters.JSON.convertAnother(JSON.java:161) 
at grails.converters.JSON.value(JSON.java:198) 
at grails.converters.JSON.convertAnother(JSON.java:161) 
at grails.converters.JSON.value(JSON.java:198) 
at grails.converters.JSON.convertAnother(JSON.java:161) 
at grails.converters.JSON.value(JSON.java:198) 
at grails.converters.JSON.convertAnother(JSON.java:161) 
at grails.converters.JSON.value(JSON.java:198) 
at grails.converters.JSON.convertAnother(JSON.java:161) 
at grails.converters.JSON.value(JSON.java:198) 
at grails.converters.JSON.convertAnother(JSON.java:161) 
at grails.converters.JSON.value(JSON.java:198) 
at grails.converters.JSON.render(JSON.java:133) 
at grails.converters.JSON.render(JSON.java:149) 
at com.foo.FooController$_closure2.doCall(FooController.groovy:18) 
at com.foo.FooController$_closure2.doCall(FooController.groovy) 
at java.lang.Thread.run(Thread.java:662) 

を以下のコードを参照してくださいXMLを生成するために、私は、画面上に次のエラーを取得する:

このページは以下のエラーが含まれています

コラム68の1行目でエラー:エンコードの誤差が 低いとは、最初のエラーまでのページのレンダリングです。私は「なら、私を許して、Grailsのに新たなんだ> 1.3.7 -

@MultiTenant 
class Foo { 

    String name 
    String description 
    List modules = new ArrayList(); 

    static belongsTo = [something : Something] 
    static hasMany = [anything : Anything] 

    static mapping = { 
     table 'foo' 
     version false // version is set to false, because this isn't available by  default for legacy databases 
     id generator:'identity', column:'id' 
     sort "name" 
     description sqlType: "text" 
     tenantId column:'tenant_id' 
    } 

    static constraints = { 
     something(blank:false) 
     name(size:1..100, blank:false, unique:['tenantId','project']) 
     description() 
    } 



    @Override 
    String toString() { 
     return name 
    } 
} 

Grailsのバージョン:

と、次のスタックトレース:ここ

[http-8080-2] [tenant 122] ERROR errors.GrailsExceptionResolver - Exception occurred when processing request: [GET] /project/foo/xmlList 
Stacktrace follows: 
java.lang.NullPointerException 
at grails.converters.XML.getElementName(XML.java:130) 
at grails.converters.XML.convertAnother(XML.java:173) 
at grails.converters.XML.convertAnother(XML.java:173) 
at grails.converters.XML.convertAnother(XML.java:173) 
at grails.converters.XML.convertAnother(XML.java:173) 
at grails.converters.XML.convertAnother(XML.java:173) 
at grails.converters.XML.convertAnother(XML.java:173) 
at grails.converters.XML.convertAnother(XML.java:173) 
at grails.converters.XML.convertAnother(XML.java:173) 
at grails.converters.XML.render(XML.java:113) 
at grails.converters.XML.render(XML.java:256) 
at com.foo.FooController$_closure1.doCall(FooController.groovy:14) 
at com.foo.FooController$_closure1.doCall(FooController.groovy) 
at java.lang.Thread.run(Thread.java:662) 

は私Foo.groovyです私は何か新しいことを尋ねていますが、私はここで本当に困っています...

+0

Foo damainクラスと使用しているGrailsのバージョンを投稿できますか? –

+0

ok ...それをやって... – JRafaelM

+0

ここから抽象化したジャスパーのコードもあります...実際の問題ではないと思います... – JRafaelM

答えて

0

私は現時点であなたのコードを試すことができませんので、私はあなたに回避策を提案しようとしています:

def jsonList = { 
     def foos = Foo.list() 
     render(contentType:"text/json") { 
      foos { 
       for(f in foos) { 
        foo(name: f.name, description: f.description) 
       } 
      } 
     } 
} 

xmlListコントローラメソッドでも同じです。

それがあなたに役立つかどうか教えてください。

+0

ok、ill tr​​y that ... – JRafaelM

+0

Fabrizio、例外を取得しています次の行にあります:foos {... – JRafaelM

+0

Stacktraceは以下の通りです: groovy.lang.MissingMethodException:メソッドのシグネチャがありません:java.util.ArrayList.call()は引数タイプには適用できません: – JRafaelM

0

これは私が使用している回避策です。

def foos = Foos.findAll() 
def array = [] 
for (Foo acc : foos) { 
    def data = new Foo(id: acc.id, bar : acc.bar) 
    array << data 
} 
render array as JSON