К сожалению, скорость не настолько дружелюбна к OSGi.Поэтому вы не можете использовать встроенный ClasspathResourceLoader, и трудно также добавить специально разработанный ResourceLoader.
Я предлагаю вам получить ваш шаблон в качестве Reader любым из обычных способов и выбрать один из следующих:
- Используйте функцию расширения VelocityEngine, если вам нужно редко объединять шаблон (производительность не имеет большого значения)
- Создать шаблон вручную с внутренними классами Velocity
Первый вариант можно использовать, если вам не нужно часто объединять шаблоны, поэтому производительность не является ключевым требованием.
Вот пример для второго варианта, где создается шаблонОбъект можно использовать повторно, вызвав для него функцию слияния (ожидая, что у вас уже есть Reader для вашего файла или ресурса vm):
RuntimeInstance runtimeInstance = new RuntimeInstance();
runtimeInstance.init();
SimpleNode simpleNode = runtimeInstance.parse(reader, "nameOfYourTemplateResource");
Template template = new Template();
simpleNode.init(new InternalContextAdapterImpl(new VelocityContext()), runtimeInstance);
template.setData(simpleNode);
template.merge(...);
...
Чтобы получить читателя для файла vm в OSGi, вам нужно выбратькласс, который обязательно находится в том же пакете, что и ресурс vm, и вызывает SameBundleClass.class.getResourceAsStream ... Вы можете преобразовать свой поток в устройство записи с InputStreamReader, чем.
Обратите внимание, что в примере пропущен некоторый блок try-catch-finally.