INT-3193: Add ObjectToMapTransformer flatten attr
JIRA: https://jira.springsource.org/browse/INT-3193
This commit is contained in:
committed by
Artem Bilan
parent
4dd95c41ea
commit
cd3f13ac91
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2010 the original author or authors.
|
||||
* Copyright 2002-2013 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -22,6 +22,7 @@ import org.w3c.dom.Element;
|
||||
|
||||
/**
|
||||
* @author Oleg Zhurakousky
|
||||
* @author Mauro Franceschini
|
||||
* @since 2.0
|
||||
*/
|
||||
public class ObjectToMapTransformerParser extends AbstractTransformerParser {
|
||||
@@ -33,5 +34,6 @@ public class ObjectToMapTransformerParser extends AbstractTransformerParser {
|
||||
|
||||
@Override
|
||||
protected void parseTransformer(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) {
|
||||
IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "flatten", "shouldFlattenKeys");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2169,6 +2169,15 @@
|
||||
<xsd:complexContent>
|
||||
<xsd:extension base="specialized-transformer-type">
|
||||
<xsd:attributeGroup ref="inputOutputChannelGroup" />
|
||||
<xsd:attribute name="flatten" type="xsd:string" default="true">
|
||||
<xsd:annotation>
|
||||
<xsd:documentation>
|
||||
Specifies if the result Map of Maps should be transformed further to flat keys of
|
||||
object's property paths.
|
||||
Default is 'true'.
|
||||
</xsd:documentation>
|
||||
</xsd:annotation>
|
||||
</xsd:attribute>
|
||||
</xsd:extension>
|
||||
</xsd:complexContent>
|
||||
</xsd:complexType>
|
||||
|
||||
@@ -15,4 +15,12 @@
|
||||
|
||||
<object-to-map-transformer input-channel="directInput" output-channel="output"/>
|
||||
|
||||
<channel id="nestedInput"/>
|
||||
|
||||
<channel id="nestedOutput">
|
||||
<queue capacity="1"/>
|
||||
</channel>
|
||||
|
||||
<object-to-map-transformer input-channel="nestedInput" output-channel="nestedOutput" flatten="false"/>
|
||||
|
||||
</beans:beans>
|
||||
|
||||
@@ -21,6 +21,7 @@ import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.hamcrest.Matchers;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@@ -40,10 +41,12 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertThat;
|
||||
|
||||
/**
|
||||
* @author Oleg Zhurakousky
|
||||
* @author Gunnar Hillert
|
||||
* @author Mauro Franceschini
|
||||
*/
|
||||
@ContextConfiguration
|
||||
@RunWith(SpringJUnit4ClassRunner.class)
|
||||
@@ -57,6 +60,14 @@ public class ObjectToMapTransformerParserTests {
|
||||
@Qualifier("output")
|
||||
private PollableChannel output;
|
||||
|
||||
@Autowired
|
||||
@Qualifier("nestedInput")
|
||||
private MessageChannel nestedInput;
|
||||
|
||||
@Autowired
|
||||
@Qualifier("nestedOutput")
|
||||
private PollableChannel nestedOutput;
|
||||
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Test
|
||||
@@ -90,6 +101,23 @@ public class ObjectToMapTransformerParserTests {
|
||||
directInput.send(message);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testObjectToNotFlattenedMapTransformer(){
|
||||
Employee employee = this.buildEmployee();
|
||||
|
||||
Message<Employee> message = MessageBuilder.withPayload(employee).build();
|
||||
nestedInput.send(message);
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
Message<Map<String, Object>> outputMessage = (Message<Map<String, Object>>) nestedOutput.receive(1000);
|
||||
Map<String, Object> transformedMap = outputMessage.getPayload();
|
||||
assertNotNull(outputMessage.getPayload());
|
||||
|
||||
assertEquals(employee.getCompanyName(), transformedMap.get("companyName"));
|
||||
assertThat(transformedMap.get("companyAddress"), Matchers.instanceOf(Map.class));
|
||||
assertThat(transformedMap.get("departments"), Matchers.instanceOf(List.class));
|
||||
}
|
||||
|
||||
@SuppressWarnings({ "unchecked", "rawtypes" })
|
||||
public Employee buildEmployee(){
|
||||
Address companyAddress = new Address();
|
||||
|
||||
Reference in New Issue
Block a user