Строковый шаблон 4 Проблемы с STGroupDir
Некоторое время мы использовали строковый шаблон в java и только что обновили до String Template 4.0.7.
В строковом шаблоне 3.2 (версия, которую мы ранее использовали) у меня был файл строкового шаблона с именем stringtemplate.st
в src/main/resources
, и у нас просто была группа, которая называлась всем, что нам нравилось, поскольку это, казалось, не имело значения, и загрузила шаблон следующим образом:
final StringTemplateGroup group = new StringTemplateGroup("groupName");
final StringTemplate xmlMessage = group.getInstanceOf("stringtemplate");
После обновления до 4.0.7, если вы хотите загрузить отдельные файлы, я понимаю, что вам нужно иметь STGroupDir
объект с именем папки, в которой расположены шаблоны. Итак, я переместил файл строки шаблона в src/main/resources/templates
и изменил приведенный выше код к этому:
final URL url = Thread.currentThread().getContextClassLoader().getResource("templates");
final STGroup group = new STGroupDir(url.getPath(), '$', '$');
final ST xmlMessage = group.getInstanceOf("stringtemplate");
Затем, когда я пытаюсь заполнить шаблон строки, это приводит к созданию нулевого указателя, и кажется, что шаблоны не найдены.
Насколько я понимаю, String, передаваемый в конструктор STGroupDir, должен быть каталогом, в котором находятся файлы шаблонов, и что если файлы шаблонов там не найдены, путь к классу будет найден в любом случае. Я что-то принципиально неправильно понимаю? Любые предложения относительно того, что я делаю не так?
1 ответ
Извините, что так скоро ответил на свой вопрос, но, похоже, я неправильно понял синтаксис в файле.st. Я объявил аргументы сверху, но я не понял, что x в примерах означает имя файла. Итак, у меня было:
x(message) ::= <<
<?xml version="1.0" encoding="UTF-8"?> ...
>>
Я заменил это на:
stringtemplate(message) ::= <<
<?xml version="1.0" encoding="UTF-8"?> ...
>>
и это сработало. Спасибо за ответ на этот вопрос, который помог мне разобраться.