Конфигурируемый (например, XML) Java Bean to Bean Mapping Framework - PullRequest
0 голосов
/ 15 марта 2012

Я ищу Java Bean Mapping Mapping Framework, чтобы их правила отображения могли быть определены вне / не в Java-коде. Исходный и целевой bean-компоненты имеют n subBeans, поэтому правила отображения могут быть немного сложными (а не простым однозначным отображением).

Небольшой обзор процесса: Это простой процесс ETL, но с настраиваемой логикой отображения. Я использую Spring Batch для загрузки многострочной записи (файл с фиксированной длиной) в бин. Это просто представление записи в виде javabean, чтобы использовать ее в качестве основы для определенных правил отображения. Результатом этого сопоставления является другой javabean, который полностью отличается от исходного. И здесь я хотел бы использовать универсальный фреймворк сопоставления между этим и Java-бинами.

Часть Spring Batch полностью понятна и реализована.

Конечно, я мог бы определить это жестко в java, но по соображениям прозрачности я должен экспортировать эту логику отображения вне java-кода.

Кто-нибудь знает такие рамки? Один существует? Я нашел Dozer, но думаю, что не могу определить некоторые сложные правила отображения в их XML.

Ответы [ 2 ]

1 голос
/ 15 марта 2012

Может быть. Я бы использовал для этого Java Scripting API . Он позволяет загружать скрипты (JavaScript, Beanshell, Groovy и т. Д.) И запускать их. Вы можете поместить строку ввода (или всю модель) в переменную, и сценарий затем может создать новую структуру объекта.

0 голосов
/ 30 марта 2015

попробуйте использовать JMapper Framework. В XML вы можете написать STATIC и DYNAMIC преобразование, используя заполнители, чтобы использовать значения и имена полей, например, если вам нужно получить и установить значения из карты, код выглядит следующим образом:

<conversion name="fromMapToAll" from="map" type="DYNAMIC">
        return (${destination.type}) ${source}.get("${destination.name}");
</conversion>
<conversion name="fromAllToMap" to="map" type="DYNAMIC">
        ${destination}.put("${source.name}",${source});
        return ${destination};
</conversion>

см. Страницу wiki для получения дополнительной информации.

...