我们正在编写一个Grails插件,需要让该插件修改web.xml文件。我们正在添加条目(该部分已经完成),还需要修改web.xml中的现有条目。这是我们遇到的问题。
根据文档,传递到doWithWebDescriptor闭包的参数应该是一个GPathResult对象。因此,我们假设我们可以执行以下操作(以会话超时为例):
def doWithWebDescriptor = { xml ->
xml.'session-config'.'session-timeout'.replaceBody(60)
}
但这引发了以下例外:
groovy.lang.MissingMethodException: No signature of method: groovy.xml.dom.DOMCategory$NodeListsHolder.replaceBody() is applicable for argument types ...
这个异常使得传递到这个闭包中的参数看起来实际上不是GPathResult对象,而是DOMCategory$NodeListsHolder对象,这实际上没有文档。
我们还尝试了其他方法,比如使用replaceNode等。似乎什么都不起作用。
试试这个。
def doWithWebDescriptor = { xml ->
xml.'session-config'.'session-timeout'[0].replaceNode {
'session-timeout' 60
}
}