2012-03-15 2 views
0

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

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

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

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

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

ответ

1

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

0

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

<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 страница для получения дополнительной информации.

Смежные вопросы