Skip to content

Instantly share code, notes, and snippets.

@aheusingfeld
Created February 9, 2012 20:52
Show Gist options
  • Select an option

  • Save aheusingfeld/1782994 to your computer and use it in GitHub Desktop.

Select an option

Save aheusingfeld/1782994 to your computer and use it in GitHub Desktop.

Revisions

  1. aheusingfeld revised this gist Feb 9, 2012. 1 changed file with 1 addition and 4 deletions.
    5 changes: 1 addition & 4 deletions BeanPropertySettingTransformer.java
    Original file line number Diff line number Diff line change
    @@ -47,10 +47,7 @@ public Message<?> transform(final Message<?> message)
    {
    Assert.notNull(propertyMapping, "'propertyMapping' must be set beforehand!");

    if (targetObject == null)
    {
    targetObject = message.getPayload();
    }
    targetObject = message.getPayload();

    for (String property : propertyMapping.keySet())
    {
  2. aheusingfeld created this gist Feb 9, 2012.
    107 changes: 107 additions & 0 deletions BeanPropertySettingTransformer.java
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,107 @@
    package de.fittransporte.fitdb.util.integration;

    import de.fittransporte.fitdb.util.ExpressionUtil;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.BeanWrapper;
    import org.springframework.beans.PropertyAccessorFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.core.convert.ConversionService;
    import org.springframework.expression.EvaluationException;
    import org.springframework.integration.Message;
    import org.springframework.integration.transformer.Transformer;
    import org.springframework.util.Assert;

    import java.util.Map;

    /**
    * Sets properties of the <em>targetObject</em> using the specified <em>propertyMapping</em> with the incoming message.
    * If targetObject is not specified the <em>message.getPayload()</em> is set as <em>targetObject</em>
    *
    * Configuration sample:
    * <pre>
    &lt;int:transformer method="transform"&gt;
    &lt;bean id="mapToSalesOrderPalletsTransformer" class="de.fittransporte.fitdb.util.integration.BeanPropertySettingTransformer"&gt;
    &lt;property name="propertyMapping"&gt;
    &lt;util:map&gt;
    &lt;entry key="salesOrder" value="%{headers['salesorder']}"/&gt;
    &lt;entry key="palletCount" value="%{headers['pallet']['ANZAHL_PALETTEN']}"/&gt;
    &lt;entry key="palletType" value="%{headers['pallet']['PALETTENTYP']}"/&gt;
    &lt;entry key="palletTypeString" value="%{headers['pallet']['PALETTENTYP']}"/&gt;
    &lt;/util:map&gt;
    &lt;/property&gt;
    &lt;/bean&gt;
    &lt;/int:transformer&gt;
    * </pre>
    */
    public class BeanPropertySettingTransformer implements Transformer
    {
    private static final Logger LOG = LoggerFactory.getLogger(BeanPropertySettingTransformer.class);
    private ConversionService conversionService;

    private Map<String, Object> propertyMapping;
    private Object targetObject;

    @Override
    public Message<?> transform(final Message<?> message)
    {
    Assert.notNull(propertyMapping, "'propertyMapping' must be set beforehand!");

    if (targetObject == null)
    {
    targetObject = message.getPayload();
    }

    for (String property : propertyMapping.keySet())
    {
    Object propValue = propertyMapping.get(property);
    final BeanWrapper wrapper = PropertyAccessorFactory.forBeanPropertyAccess(targetObject);
    final Class targetType = wrapper.getPropertyType(property);

    if (propValue instanceof String)
    {
    try {
    propValue = ExpressionUtil.parse((String) propValue, message, conversionService, targetType);
    } catch (EvaluationException evex)
    {
    LOG.error("Error evaluating the specified expression", evex);
    propValue = null;
    }
    }
    wrapper.setPropertyValue(property, propValue);
    }
    return message;
    }


    public void setPropertyMapping(Map<String, Object> propertyMapping)
    {
    this.propertyMapping = propertyMapping;
    }

    public Map<String, Object> getPropertyMapping()
    {
    return propertyMapping;
    }

    public Object getTargetObject()
    {
    return targetObject;
    }

    public void setTargetObject(final Object targetObject)
    {
    this.targetObject = targetObject;
    }

    public ConversionService getConversionService()
    {
    return conversionService;
    }

    @Autowired
    public void setConversionService(final ConversionService conversionService)
    {
    this.conversionService = conversionService;
    }
    }