从 Grails 插件中的 doWithWebDescriptor 闭包更改 web.xml 值
Changing web.xml value from doWithWebDescriptor closure in Grails Plugin
我们正在编写一个 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
}
}
我们正在编写一个 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
}
}