Строковый шаблон 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"?> ...
>>

и это сработало. Спасибо за ответ на этот вопрос, который помог мне разобраться.

Другие вопросы по тегам