grails - Grails “render as XML”抛出java.lang.NullPointerException-我做错了什么?

标签 grails gorm

我使用以下Grails代码将SomeClass -objects的集合呈现为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]
}

我的问题是:
  • 与“作为XML呈现”交互时,我在做什么错? NPE在这里吗?
  • 为什么后者的SomeClass定义有效而前者无效?
  • 最佳答案

    似乎在定义上存在问题,因为XML转换器无法转换空元素(整个字段或仅列表元素)。

    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]
    }
    

    真的很奇怪的定义。 静态hasMany = [a:A,b:B,c:C] 尝试创建三个字段 a,b,c ,每个字段的类型为 java.util.Set 。只需尝试以下定义:
        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]
    }
    

    由于动态打字性质而工作。在这里,您没有严格的类型检查,并且可以轻松地将变量重新分配给其他类型。

    关于grails - Grails “render as XML”抛出java.lang.NullPointerException-我做错了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3919442/

    相关文章:

    grails - 在Grails 3中未创建表

    grails - Gorm一对一和一对多

    sql - 加入在表 sql 查询中不起作用

    hibernate - 单向一对多

    grails - grails,hasMany,set和重复项

    grails - Grails:从HQL到DetachedCriteria查询

    java - Spock 测试因 NullPointerException 失败

    database - 如何使用Grails和多个Postgresql数据库架构

    javascript - HTML5 SSE在Grails中

    hibernate - Grails 3.2中的域对象上是否存在默认的gorm list方法的默认最大值