Я использую Apache Velocity для замены токенов через шаблоны который выглядит следующим образом:Проверьте маркеры были заменены
<batch>
#set($appName = "helloworld")
#set($appDisplayName = "Hello World App")
#set($appVersion = "1.0")
<registerapplication>
<appkey>$appkey</appkey>
<appname>$appName</appname>
<appversion>$appVersion</appversion>
<appdescriptiondefault>$appDisplayName</appdescriptiondefault>
</registerapplication>
</batch>
Следующие три строки кода, сделать трюк:
Velocity.init();
StringWriter w = new StringWriter();
Velocity.evaluate(new VelocityContext(), w, "", new InputStreamReader(inputStream);
Он работает отлично, но у меня есть дополнительное требование. Если некоторые замены действительно сделаны, пользователь должен получить уведомление. В противном случае, т. Е. Если шаблон выглядит как
<batch>
#set($appName = "helloworld")
#set($appDisplayName = "Hello World App")
#set($appVersion = "1.0")
<registerapplication>
<appkey>$appkey</appkey>
<appname>helloworld</appname>
<appdescriptiondefault>Hello World App</appdescriptiondefault>
</registerapplication>
</batch>
не следует предпринимать никаких действий.
Любая идея, как достичь этого?
upd Благодаря Клоду Бриссон. Мое решение выглядит следующим образом:
VelocityContext velocityContext = new VelocityContext();
EventCartridge eventCartridge = new EventCartridge();
velocityContext.attachEventCartridge(eventCartridge);
eventCartridge.addReferenceInsertionEventHandler(new ReferenceInsertionEventHandler()
{
@Override
public Object referenceInsert(String reference, Object value)
{
if (!varSubsituted && value != null)
{
varSubsituted = true;
}
return value;
}
});