Я рассматриваю реализацию сценария интеграции, когда мне нужно выполнить динамическое сопоставление от источника к цели, проблема в том, что сопоставление должно быть достаточно конфигурируемым и не может быть связано с фиксированными значениями.Динамическое сопоставление в Dozer и Camel
Я использую Camel как инфраструктуру интеграции и импортирую файл (может иметь другую структуру данных, но мы предполагаем, что это файл CSV), тогда мне нужно сопоставить данные из файла во внутренний формат. Я рассматриваю использование Dozer и конфигурацию отображения XML для выполнения этого сопоставления.
Итак, что я хочу сделать, это загрузить файл, развязать CSV, а затем разбить файл, а затем я хотел бы сопоставить HashMap (полученный из CSV unmarshal) в теле верблюда другому хэш-карте, но изменить значения ключей.
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://camel.apache.org/schema/springhttp://camel.apache.org/schema/spring/camel-spring.xsd «>
<bean id="Debug" class="com.mycompany.camel.spring.DebugProcessor" />
<bean id="dozerConverterLoader"
class="org.apache.camel.converter.dozer.DozerTypeConverterLoader" />
<bean id="DynamicMapper" class="org.dozer.DozerBeanMapper">
<property name="mappingFiles">
<list>
<value>Mapping.xml</value>
</list>
</property>
</bean>
<camelContext trace="false"
xmlns="http://camel.apache.org/schema/spring">
<route>
<from uri="file:src?fileName=sample_data.csv&noop=true" />
<unmarshal>
<csv delimiter="," skipHeaderRecord="true" useMaps="true" />
</unmarshal>
<split>
<simple>${body}</simple>
<bean ref="Debug" />
<bean ref="DynamicMapper" />
<bean ref="Debug" />
</split>
</route>
</camelContext>
Файл отображения выглядит следующим образом (чисто в качестве примера это, очевидно, будет расширяться с большим количеством полевых отображений)
<?xml version="1.0" encoding="UTF-8"?>
<mappings xmlns="http://dozer.sourceforge.net" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://dozer.sourceforge.net http://dozer.sourceforge.net/schema/beanmapping.xsd">
<mapping>
<class-a>java.util.HashMap</class-a>
<class-b>java.util.HashMap</class-b>
<field>
<a key="overtimehours">this</a>
<b key="OVT_HRS">TargetMap</b>
</field>
</mapping>
</mappings>
Однако, когда я выполняю t он верблюд-маршрут, я продолжаю получать исключение "org.dozer.MappingException: Destination class не должен быть нулевым"
Что я делаю неправильно? и любые другие предложения также приветствуются для достижения функциональности динамического сопоставления.
вам необходимо показать код вашего динамического картографа, который является кодом dozer, который не работает. Также прочитайте бульдозерный документ о том, что означает эта ошибка на бульдозерах. –