INT-3067 Xslt method=text StringResult coercion

Previously there was a need to add `result-type="StringResult"`
to <int-xml:xslt-transformer> for xslt output `method='text'`
in case payload was non-standard type (e.g. `File`), if we wanted to get
result as text.

* Add coercion to `StringResult` code, if `Transformer`'s property `method` is 'text' and there is no explicit `resultFactory` provided.
* Add documentation to reference manual

JIRA: https://jira.springsource.org/browse/INT-3067
This commit is contained in:
Artem Bilan
2013-06-18 16:24:21 +03:00
committed by Gunnar Hillert
parent d549734837
commit 41fe514469
7 changed files with 129 additions and 82 deletions

View File

@@ -53,6 +53,12 @@
xsl-resource="classpath:org/springframework/integration/xml/transformer/transform-tostring.xsl">
</int-xml:xslt-transformer>
<int-xml:xslt-transformer id="outputFileAsString"
input-channel="outputFileAsStringChannel"
output-channel="output" result-transformer="resultToStringTransformer"
xsl-resource="classpath:org/springframework/integration/xml/transformer/transform-tostring.xsl">
</int-xml:xslt-transformer>
<bean id="resultToStringTransformer" class="org.springframework.integration.xml.transformer.ResultToStringTransformer" />

View File

@@ -20,6 +20,7 @@ import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.assertFalse;
import java.io.IOException;
import java.util.Properties;
import org.junit.Test;
@@ -28,6 +29,7 @@ import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.ApplicationContext;
import org.springframework.core.io.ClassPathResource;
import org.springframework.integration.Message;
import org.springframework.integration.MessageChannel;
import org.springframework.integration.channel.QueueChannel;
@@ -41,94 +43,103 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
* @author Oleg Zhurakousky
* @author Jonas Partner
* @author Gunnar Hillert
* @author Artem Bilan
*/
@ContextConfiguration
@RunWith(SpringJUnit4ClassRunner.class)
public class XsltTransformerTests {
private String docAsString = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?><order><orderItem>test</orderItem></order>";
@Autowired
private ApplicationContext applicationContext;
@Autowired
@Qualifier("output")
private QueueChannel output;
private String docAsString = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?><order><orderItem>test</orderItem></order>";
@Autowired
private ApplicationContext applicationContext;
@Autowired
@Qualifier("output")
private QueueChannel output;
@Test
public void testParamHeadersWithStartWildCharacter() {
MessageChannel input = applicationContext.getBean("paramHeadersWithStartWildCharacterChannel", MessageChannel.class);
Message<?> message = MessageBuilder.withPayload(this.docAsString).
setHeader("testParam", "testParamValue").
setHeader("testParam2", "FOO").
build();
input.send(message);
Message<?> resultMessage = output.receive();
MessageHistory history = MessageHistory.read(resultMessage);
assertNotNull(history);
Properties componentHistoryRecord = TestUtils.locateComponentInHistory(history, "paramHeadersWithStartWildCharacter", 0);
assertNotNull(componentHistoryRecord);
assertEquals("xml:xslt-transformer", componentHistoryRecord.get("type"));
assertEquals("Wrong payload type", String.class, resultMessage.getPayload().getClass());
assertTrue(((String) resultMessage.getPayload()).contains("testParamValue"));
assertFalse(((String) resultMessage.getPayload()).contains("FOO"));
}
@Test
public void testParamHeadersWithStartWildCharacter() {
MessageChannel input = applicationContext.getBean("paramHeadersWithStartWildCharacterChannel", MessageChannel.class);
Message<?> message = MessageBuilder.withPayload(this.docAsString).
setHeader("testParam", "testParamValue").
setHeader("testParam2", "FOO").
build();
input.send(message);
Message<?> resultMessage = output.receive();
MessageHistory history = MessageHistory.read(resultMessage);
assertNotNull(history);
Properties componentHistoryRecord = TestUtils.locateComponentInHistory(history, "paramHeadersWithStartWildCharacter", 0);
assertNotNull(componentHistoryRecord);
assertEquals("xml:xslt-transformer", componentHistoryRecord.get("type"));
assertEquals("Wrong payload type", String.class, resultMessage.getPayload().getClass());
assertTrue(((String) resultMessage.getPayload()).contains("testParamValue"));
assertFalse(((String) resultMessage.getPayload()).contains("FOO"));
}
@Test
public void testParamHeadersWithEndWildCharacter() {
MessageChannel input = applicationContext.getBean("paramHeadersWithEndWildCharacterChannel", MessageChannel.class);
Message<?> message = MessageBuilder.withPayload(this.docAsString).
setHeader("testParam", "testParamValue").
setHeader("testParam2", "FOO").
build();
input.send(message);
Message<?> resultMessage = output.receive();
assertEquals("Wrong payload type", String.class, resultMessage.getPayload().getClass());
assertTrue(((String) resultMessage.getPayload()).contains("testParamValue"));
assertTrue(((String) resultMessage.getPayload()).contains("FOO"));
}
@Test
public void testParamHeadersWithEndWildCharacter() {
MessageChannel input = applicationContext.getBean("paramHeadersWithEndWildCharacterChannel", MessageChannel.class);
Message<?> message = MessageBuilder.withPayload(this.docAsString).
setHeader("testParam", "testParamValue").
setHeader("testParam2", "FOO").
build();
input.send(message);
Message<?> resultMessage = output.receive();
assertEquals("Wrong payload type", String.class, resultMessage.getPayload().getClass());
assertTrue(((String) resultMessage.getPayload()).contains("testParamValue"));
assertTrue(((String) resultMessage.getPayload()).contains("FOO"));
}
@Test
public void testParamHeadersWithIndividualParameters() {
MessageChannel input = applicationContext.getBean("paramHeadersWithIndividualParametersChannel", MessageChannel.class);
Message<?> message = MessageBuilder.withPayload(this.docAsString).
setHeader("testParam", "testParamValue").
setHeader("testParam2", "FOO").
build();
input.send(message);
Message<?> resultMessage = output.receive();
assertEquals("Wrong payload type", String.class, resultMessage.getPayload().getClass());
assertTrue(((String) resultMessage.getPayload()).contains("testParamValue"));
assertTrue(((String) resultMessage.getPayload()).contains("FOO"));
assertTrue(((String) resultMessage.getPayload()).contains("hello"));
}
@Test
public void testParamHeadersWithIndividualParameters() {
MessageChannel input = applicationContext.getBean("paramHeadersWithIndividualParametersChannel", MessageChannel.class);
Message<?> message = MessageBuilder.withPayload(this.docAsString).
setHeader("testParam", "testParamValue").
setHeader("testParam2", "FOO").
build();
input.send(message);
Message<?> resultMessage = output.receive();
assertEquals("Wrong payload type", String.class, resultMessage.getPayload().getClass());
assertTrue(((String) resultMessage.getPayload()).contains("testParamValue"));
assertTrue(((String) resultMessage.getPayload()).contains("FOO"));
assertTrue(((String) resultMessage.getPayload()).contains("hello"));
}
@Test
public void testParamHeadersCombo() {
MessageChannel input = applicationContext.getBean("paramHeadersComboChannel", MessageChannel.class);
Message<?> message = MessageBuilder.withPayload(this.docAsString).
setHeader("testParam", "testParamValue").
setHeader("testParam2", "FOO").
build();
input.send(message);
Message<?> resultMessage = output.receive();
assertEquals("Wrong payload type", String.class, resultMessage.getPayload().getClass());
assertTrue(((String) resultMessage.getPayload()).contains("testParamValue"));
assertTrue(((String) resultMessage.getPayload()).contains("FOO"));
assertTrue(((String) resultMessage.getPayload()).contains("hello"));
}
@Test
public void testParamHeadersCombo() {
MessageChannel input = applicationContext.getBean("paramHeadersComboChannel", MessageChannel.class);
Message<?> message = MessageBuilder.withPayload(this.docAsString).
setHeader("testParam", "testParamValue").
setHeader("testParam2", "FOO").
build();
input.send(message);
Message<?> resultMessage = output.receive();
assertEquals("Wrong payload type", String.class, resultMessage.getPayload().getClass());
assertTrue(((String) resultMessage.getPayload()).contains("testParamValue"));
assertTrue(((String) resultMessage.getPayload()).contains("FOO"));
assertTrue(((String) resultMessage.getPayload()).contains("hello"));
}
@Test
public void outputAsString() {
MessageChannel input = applicationContext.getBean("outputAsStringChannel", MessageChannel.class);
Message<?> message = MessageBuilder.withPayload(this.docAsString).
build();
input.send(message);
Message<?> resultMessage = output.receive();
assertEquals("Wrong payload type", String.class, resultMessage.getPayload().getClass());
String stringPayload = (String)resultMessage.getPayload();
assertEquals("Wrong content of payload", "hello world text",stringPayload.trim());
}
@Test
public void outputAsString() {
MessageChannel input = applicationContext.getBean("outputAsStringChannel", MessageChannel.class);
Message<?> message = MessageBuilder.withPayload(this.docAsString).
build();
input.send(message);
Message<?> resultMessage = output.receive();
assertEquals("Wrong payload type", String.class, resultMessage.getPayload().getClass());
String stringPayload = (String)resultMessage.getPayload();
assertEquals("Wrong content of payload", "hello world text",stringPayload.trim());
}
@Test
public void testInt3067OutputFileAsString() throws IOException {
MessageChannel input = applicationContext.getBean("outputFileAsStringChannel", MessageChannel.class);
Message<?> message = MessageBuilder.withPayload(new ClassPathResource("org/springframework/integration/xml/transformer/xsl-text-file.xml").getFile()).build();
input.send(message);
Message<?> resultMessage = output.receive();
assertEquals("Wrong payload type", String.class, resultMessage.getPayload().getClass());
String stringPayload = (String) resultMessage.getPayload();
assertEquals("Wrong content of payload", "hello world text", stringPayload.trim());
}
}

View File

@@ -0,0 +1,3 @@
<order>
<orderItem>test</orderItem>
</order>