Я разрабатываю небольшой инструмент на основе джерси и freemarker, который позволит дизайнерам тестировать там шаблоны freemarker локально, используя некоторые mok-объекты.
Извините, что пишу здесь, но яне могу найти какую-либо документацию по этому поводу, кроме некоторого кода и javadocs.
Для этого я сделал следующее:
1 Зависимости:
<dependency>
<groupId>com.sun.jersey.contribs</groupId>
<artifactId>jersey-freemarker</artifactId>
<version>1.9</version>
</dependency>
2 Начиная гризли, сообщая, гдечтобы найти шаблоны freemarker:
protected static HttpServer startServer() throws IOException {
System.out.println("Starting grizzly...");
Map<String, Object> params = new HashMap<String, Object>();
params.put("com.sun.jersey.freemarker.templateBasePath", "/");
ResourceConfig rc = new PackagesResourceConfig("resource.package");
rc.setPropertiesAndFeatures(params);
HttpServer server = GrizzlyServerFactory.createHttpServer(BASE_URI, rc);
server.getServerConfiguration().addHttpHandler(
new StaticHttpHandler("/libs"), "/libs");
return server;
}
3 Создает корневой ресурс и связывает файлы freemarker:
@Context ResourceConfig resourceConfig;
@Path("{path: ([^\\s]+(\\.(?i)(ftl))$)}")
public Viewable renderFtl (@PathParam("path") String path) throws IOException {
Viewable view = new Viewable("/"+path);
return view;
}
Все работает нормально, за исключением того, что файлы freemarker не отображаются.У меня есть пустая белая страница, но файл существует, и отладчик входит в метод renderFtl правильно.
Знаете ли вы, как я могу это сделать?
Я прочитал много статей здесь и в Интернете, но только старые посты или статьи, рассказывающие о весенней интеграции, и я не хочу интегрировать ее, потому что она мне не нужна.
Мне действительно нравится Джерси, я думаю, что это одна из самых полных и мощных платформ в мире Java, но каждый раз, когда я пытаюсь найти документацию по конкретным функциям или библиотекам, я теряюсь ... Там нет выходаиз групп форумов:)
Где найти полную документацию по этому поводу?
Танков много Давид
Обновления:
Пытаясь решить, я понялЯ не могу использовать встроенную поддержку джерси, потому что для этого нужно использовать файлы, размещенные в дереве ресурсов.Итак, что я сделал, это построил конфигурацию freemarker, в тесте на данный момент, напрямую @runtime и возвращает объект StreamingOutput:
@Path("{path: ([^\\s]+(\\.(?i)(ftl))$)}")
public StreamingOutput renderFtl (@PathParam("path") String path) throws Exception {
Configuration cfg = new Configuration();
// Specify the data source where the template files come from.
// Here I set a file directory for it:
cfg.setDirectoryForTemplateLoading(new File("."));
// Create the root hash
Map<String, Object> root = new HashMap<String, Object>();
Template temp = cfg.getTemplate(path);
return new FTLOutput(root, temp);
}
FTLOutput здесь:
Это не хороший код,но только для проверки ...
class FTLOutput implements StreamingOutput {
private Object root;
private Template t;
public FTLOutput(Object root, Template t) {
this.root = root;
this.t = t;
}
@Override
public void write(OutputStream output) throws IOException {
Writer writer = new OutputStreamWriter(output);
try {
t.process(root, writer);
writer.flush();
} catch (TemplateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
У меня нет ошибок, свидетельствующих об отладке, и freemarker сообщает мне, что шаблон найден и обработан, но джерси все еще не дает мне результат ...
Я действительно не знаю почему!