Ниже приведен ответ, как использовать макросы в FTL:)
Input-smooks.Json:
{
"title": "Payment Received",
"firstName": "vijay",
"lastName": "dwivedi",
"accountId": "123",
"paymentId": "456",
"accounts": [
{
"accountId": "1111",
"paymentId": "1112"
},
{
"accountId": "2111",
"paymentId": "2112"
},
{
"accountId": "3111",
"paymentId": "3112"
}
]
}
Файл Smook-config.xml:
Определить макросы один раз и использовать в качестве функции всякий раз, когда требуется
<smooks-resource-list xmlns="http://www.milyn.org/xsd/smooks-1.1.xsd"
xmlns:json="http://www.milyn.org/xsd/smooks/json-1.1.xsd" xmlns:ftl="http://www.milyn.org/xsd/smooks/freemarker-1.1.xsd">
<params>
<param name="stream.filter.type">SAX</param>
<param name="default.serialization.on">false</param>
</params>
<json:reader rootName="json" keyWhitspaceReplacement="_">
<json:keyMap>
<json:key from="date&time" to="date_and_time" />
</json:keyMap>
</json:reader>
<resource-config selector="json">
<resource>org.milyn.delivery.DomModelCreator</resource>
</resource-config>
<ftl:freemarker applyOnElement="json">
<ftl:template>
<!--
<#macro PopulateTasks task_list>
<#list task_list as att1>
"accountId": "${att1.accountId}"
"paymentId": "${att1.paymentId}"
</#list>
</#macro>
<@PopulateTasks json.accounts.element/>
-->
</ftl:template>
</ftl:freemarker>
</smooks-resource-list>
public static void main(String[] args) throws SmooksException, IOException, SAXException {
long start = System.currentTimeMillis();
Smooks smooks = new Smooks("src/main/resources/smooks-config.xml");
try {
smooks.filterSource(new StreamSource(new
FileInputStream("src/main/resources/input_smooks.json")), new
StreamResult(System.out));
} finally {
smooks.close();
}
}
<@PopulateTasks json.accounts.element/>
это способ вызова макросов