我使用以下Grails代码将SomeClass
- 对象的集合呈现为XML:
def someObjects = SomeClass.findAllByFoo(foo)
if (someObjects) {
render(contentType:"text/xml", text:someObjects as XML)
}
大部分时间都按预期工作。但是,有时并且根据someObjects的内容,代码会失败并显示以下NullPointerException
(请注意someObjects != null
):
java.lang.NullPointerException
at grails.converters.XML.getElementName(XML.java:128)
at grails.converters.XML.convertAnother(XML.java:163)
at grails.converters.XML.convertAnother(XML.java:163)
at grails.converters.XML.convertAnother(XML.java:163)
at grails.converters.XML.render(XML.java:111)
at grails.converters.XML.toString(XML.java:281)
at project.SomethingController$_closure8.doCall(project.SomethingController:217)
at project.SomethingController$_closure8.doCall(project.SomethingController)
at java.lang.Thread.run(Thread.java:637)
这是SomeClass
类的定义:
class SomeClass {
List<A> a = new ArrayList<A>()
List<B> b = new ArrayList<B>()
List<C> c = new ArrayList<C>()
static hasMany = [a : A, b : B, c : C]
}
我发现只需将SomeClass
定义更改为:
class SomeClass {
def a = new ArrayList<A>()
def b = new ArrayList<B>()
def c = new ArrayList<C>()
static hasMany = [a : A, b : B, c : C]
}
我的问题是:
答案 0 :(得分:1)
似乎定义中存在问题,因为XML转换器无法转换null元素(整个字段或只是列表元素)。
class SomeClass {
List<A> a = new ArrayList<A>()
List<B> b = new ArrayList<B>()
List<C> c = new ArrayList<C>()
static hasMany = [a : A, b : B, c : C]
}
真的很奇怪的定义。 static hasMany = [a:A,b:B,c:C] 尝试创建三个字段 a,b,c ,每个字段的类型为 java。 util.Set 即可。 Sot只是尝试这个定义:
class SomeClass {
static hasMany =
[
a : A,
b : B,
c : C
]
}
必须没问题。
你的考试:
class SomeClass {
def a = new ArrayList<A>()
def b = new ArrayList<B>()
def c = new ArrayList<C>()
static hasMany = [a : A, b : B, c : C]
}
由于动态打字性质,正在运行。在这里,您没有严格的类型检查,并且可以轻松地将变量重新分配给不同类型。