我通過擴展BuilderSupport在Groovy中構建了一個自定義構建器。Groovy BuilderSupport的外部內容
def builder = new MyBuilder()
builder.foo {
"Some Entry" (property1:value1, property2: value2)
}
這當然,完美的作品:配置像在那裏幾乎每一個建設者的代碼示例時,它工作得很好。問題是,我不想讓我構建的信息在代碼中。我想將這些信息放在一個文件中,這個文件被構建器讀入並嵌入到對象中。我無法弄清楚如何做到這一點。
我甚至無法通過在代碼中移動簡單條目來完成這項工作。 這工作:
def textClosure = { "Some Entry" (property1:value1, property2: value2) }
builder.foo(textClosure)
因爲textClosure是一個封閉。
如果我這樣做:
def text = '"Some Entry" (property1:value1, property2: value2)'
def textClosure = { text }
builder.foo(textClosure)
建築商只被要求 「foo」 的節點。我已經嘗試了許多變體,包括直接將文本塊傳遞給構建器,而不將其封裝在構建器中。它們都產生相同的結果。
有什麼方法可以將一段任意文本傳遞給我的構建器,以便它能夠正確解析和構建它?
這些示例仍然假設要分析/ slurped的內容位於類路徑中,而我的應用程序不會這樣。我不想爲我的配置使用XML - 我查看了XmlSlurper和XmlParser的源代碼,它們都非常特定於XML。我必須從頭開始編寫我的slurper/parser,因爲沒有像BuilderSupport那樣的公共基礎。 – Chad 2009-11-24 18:43:38
接縫我沒有得到你的問題。我添加了一個例子來說明我的意思。也許你可以指出這個解決方案有什麼問題。 – 2009-11-24 20:18:39