Миграция с SoyTofu на SoyTemplates для обновления Java 17 ⇐ JAVA
-
Anonymous
Миграция с SoyTofu на SoyTemplates для обновления Java 17
Приложение, над которым я сейчас работаю, использует Java 8. Мы переходим на версию 17, и в рамках этого мне нужно преобразовать некоторый код, который в настоящее время ссылается на SoyTofu, для использования SoySauce (шаблоны закрытия Google). Вот соответствующие части класса, над которым я работаю. Моя цель — максимально легко прикоснуться к этому коду, но на каждом шагу я захожу в тупик. Обратите внимание, что я также начинающий Java-разработчик, поэтому отнеситесь к моему недостатку знаний с недоверием.
import com.google.template.soy.SoyFileSet; импортировать com.google.template.soy.tofu.SoyTofu; публичный класс Foobar { ... частные шаблоны SoyTofu soyTemplates; ... @Override protected void startUp() выдает исключение { ... Строка templatesProperty = "templates/mail.soy templates/mail-admin.soy"; пытаться { String[] templates = templatesProperty.split("\\s+"); если (templates.length > 0) { Строитель SoyFileSet.Builder = SoyFileSet.builder(); for (String t: шаблоны) { URL URL = get.Url(t); builder.add(url); } soyTemplates = builder.build().compileToTofu(); } } ... } public Message Compose (пункт MailItem) { ... Map ijData = new HashMap(); ijData.put("поддерживается", правда); ijData.put("бренд", "Аккаунты"); Строка renderSubject = soyTemplates.newRenderer(item.subject).setData(item.data).setIjData(ijData).render(); message.setSubject(renderSubject); Строка renderBody = soyTemplates.newRenderer(item.body).setData(item.data).setIjData(ijData).render(); message.setContent(renderBody, MediaType.TEXT_HTML); ... } } И фрагмент одного из файлов .soy
/** * Запрос на создание аккаунта отправлен по теме */ {шаблон accountRequestSubmitedSubject} {@param имя пользователя: строка} Запрос на аккаунт {$ij.brand}: {$username} {/шаблон} В репозитории GitHub для GCT есть документ по миграции, но он настолько отличается, что я не могу заставить его работать. Кажется, это указывает на то, что я могу компилировать шаблоны в реальном времени, но не означает, что это хорошая идея; в целях скорости. Я готов принять этот удар, поскольку шаблонов всего два.
Некоторые части этого кода содержат предупреждения об устаревании, с которыми я смогу справиться после того, как миграция заработает. Основная проблема заключается в том, что метод внедрения данных работает неправильно.
Когда я запускаю модульный тест, который ссылается на этот код, я получаю исключение
Вызвано: com.google.template.soy.error.SoyCompilationException: ошибки во время компиляции Soy файл:/target/test-classes/templates/mail-admin.soy:8: ошибка: неизвестная переменная. 8: Запрос аккаунта {$ij.brand}: {$requestorUsername} ~~~ Я пытался создать отдельный конструктор SoySauce, пытался преобразовать конструктор SoyTofu в SoySauce, но все время натыкался на стены. У кого-нибудь есть мысли?
Приложение, над которым я сейчас работаю, использует Java 8. Мы переходим на версию 17, и в рамках этого мне нужно преобразовать некоторый код, который в настоящее время ссылается на SoyTofu, для использования SoySauce (шаблоны закрытия Google). Вот соответствующие части класса, над которым я работаю. Моя цель — максимально легко прикоснуться к этому коду, но на каждом шагу я захожу в тупик. Обратите внимание, что я также начинающий Java-разработчик, поэтому отнеситесь к моему недостатку знаний с недоверием.
import com.google.template.soy.SoyFileSet; импортировать com.google.template.soy.tofu.SoyTofu; публичный класс Foobar { ... частные шаблоны SoyTofu soyTemplates; ... @Override protected void startUp() выдает исключение { ... Строка templatesProperty = "templates/mail.soy templates/mail-admin.soy"; пытаться { String[] templates = templatesProperty.split("\\s+"); если (templates.length > 0) { Строитель SoyFileSet.Builder = SoyFileSet.builder(); for (String t: шаблоны) { URL URL = get.Url(t); builder.add(url); } soyTemplates = builder.build().compileToTofu(); } } ... } public Message Compose (пункт MailItem) { ... Map ijData = new HashMap(); ijData.put("поддерживается", правда); ijData.put("бренд", "Аккаунты"); Строка renderSubject = soyTemplates.newRenderer(item.subject).setData(item.data).setIjData(ijData).render(); message.setSubject(renderSubject); Строка renderBody = soyTemplates.newRenderer(item.body).setData(item.data).setIjData(ijData).render(); message.setContent(renderBody, MediaType.TEXT_HTML); ... } } И фрагмент одного из файлов .soy
/** * Запрос на создание аккаунта отправлен по теме */ {шаблон accountRequestSubmitedSubject} {@param имя пользователя: строка} Запрос на аккаунт {$ij.brand}: {$username} {/шаблон} В репозитории GitHub для GCT есть документ по миграции, но он настолько отличается, что я не могу заставить его работать. Кажется, это указывает на то, что я могу компилировать шаблоны в реальном времени, но не означает, что это хорошая идея; в целях скорости. Я готов принять этот удар, поскольку шаблонов всего два.
Некоторые части этого кода содержат предупреждения об устаревании, с которыми я смогу справиться после того, как миграция заработает. Основная проблема заключается в том, что метод внедрения данных работает неправильно.
Когда я запускаю модульный тест, который ссылается на этот код, я получаю исключение
Вызвано: com.google.template.soy.error.SoyCompilationException: ошибки во время компиляции Soy файл:/target/test-classes/templates/mail-admin.soy:8: ошибка: неизвестная переменная. 8: Запрос аккаунта {$ij.brand}: {$requestorUsername} ~~~ Я пытался создать отдельный конструктор SoySauce, пытался преобразовать конструктор SoyTofu в SoySauce, но все время натыкался на стены. У кого-нибудь есть мысли?
Мобильная версия