Интеграция Liferay 7 и библиотеки docx4j - Интеграция Liferay 7 и библиотеки docx4j
Блоги
Навигационные полоски
docx4j - это продукт на Java с открытым исходным кодом, предназначенный для работы с файлами Microsoft Open XML. У продукта существуют бесплатная и платная версии. Нас, по большому счёту, интересовал функционал замены плейсхолдеров и генерация pdf. Если замену плейсхолдеров успешно делает сама библиотека docx4j, то для генерации надо использовать отдельный продукт из стека docx4j - https://github.com/plutext/docx4j-export-FO.
Из того, что хотелось бы рассказать в рамках этого блога - это инкапсуляция зависимостей в бандл и работа с плагинами Maven для сборки проекта. Для работы docx4j требует внушительного количества зависимостей в classpath. Деплоить их все в Liferay достаточно проблематично - часть из них не имеют версии для OSGi, часть конфликтуют с другими развёрнутыми бандлами. Решено было использовать возможность встраивания зависимостей в бандл. Скажу сразу - эту задачу можно решить как минимум 2-мя путями при помощи Maven. Первый путь - совместное использование плагинов сборки:
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-scr-plugin</artifactId>
<version>1.20.0</version>
<executions>
<execution>
<id>generate-scr-scrdescriptor</id>
<goals>
<goal>scr</goal>
</goals>
<configuration>
<generateAccessors>false</generateAccessors>
</configuration>
</execution>
</executions>
</plugin>
и
maven-bundle-plugin.
maven-scr-plugin
нам даёт возможность генерации xml описаний для Declarative Services(DS). Это xml файлы, которые создаются в папке OSGI-INF во время сборки по найденным в коде аннотациям @Component, @Reference... В maven-bundle-plugin плагине, в разделе Embed-Dependency мы можем определить список зависимостей для включения в собранный jar. К сожалению этот плагин не даёт возможность определить специфичные для Liferay пункты, например Liferay-Releng-Module-Group-Title. Для этого можно использовать возможность объединения файлов MANIFEST.MF - при помощи настройки:
<_include>src/main/resources/META-INF/MANIFEST.MF</_include>
мы задаём путь к файлу MANIFEST.MF, в котором прописаны все специфичные для Liferay пункты. Во время сборки этот файл будет добавлен к сгенерённому.
Как итог получается достаточно толстый jar, готовый к разворачиванию в Liferay, в корне которого будут все наши зависимости в виде jar файлов.
Тоже самое можно сделать при помощи bnd-maven-plugin и файла bnd.bnd.
Хочется отметить ещё один момент - уже по работе с Microsoft Word. Если при редактировании шаблона вводить символ за символом плейсхолдер вида ${placeHolder}, то с большой долей вероятности, при сохранении в формат docx(а как известно это xml) - плейсхолдер не будет монолитной строкой, так как Microsoft Word вставляет свои символы между открытием и закрытием плейсхолдера. Помогает копи-паст - скопировать строку в текстовый редактор и вставить целиком её в файл шаблона.
- 6.2 (12)
- 7.0 (12)
- activiti (14)
- apache camel (6)
- camel (11)
- devcon (6)
- devops (5)
- emdev (9)
- emdev limited (9)
- entaxy (13)
- esb (10)
- fuse (5)
- gartner (7)
- google apps (6)
- jboss (5)
- liferay (143)
- liferay 7.1 (11)
- liferay dxp (11)
- liferay7 (12)
- openshift (8)
- osgi (5)
- redhat (15)
- rest (6)
- wso2 (70)
- wso2 api-m (10)
- wso2 ei (8)
- wso2ei (5)
- wso2esb (7)
- wso2is (8)
- емдев (11)
Сайт использует файлы cookie. Они позволяют узнавать вас и получать информацию о вашем пользовательском опыте. Это нужно, чтобы улучшать сайт. Посещая страницы сайта и предоставляя свои данные, вы позволяете нам предоставлять их сторонним партнерам. Если вы согласны, продолжайте пользоваться сайтом. Если нет – установите специальные настройки в браузере или обратитесь в техподдержку.