Removed MessageTransformer due to the redundancy with MessageHandler (now that Messages are immutable). Refactored existing transformers to implement PayloadTransformer instead. All message handling is now the responsibility of the delegating PayloadTransformingMessageHandler. Also added the AbstractPaylaodTransformerParser from which all existing PayloadTransformer parsers now extend.

This commit is contained in:
Mark Fisher
2008-07-18 20:12:59 +00:00
parent 3a916b223d
commit b37a4d8f12
29 changed files with 312 additions and 431 deletions

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2007 the original author or authors.
* Copyright 2002-2008 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.
@@ -24,18 +24,17 @@ import javax.xml.transform.dom.DOMResult;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.integration.message.GenericMessage;
import org.springframework.integration.message.Message;
import org.springframework.integration.transformer.MessageTransformer;
import org.springframework.xml.transform.StringResult;
import org.w3c.dom.Document;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.integration.handler.MessageHandler;
import org.springframework.integration.message.GenericMessage;
import org.springframework.integration.message.Message;
import org.springframework.xml.transform.StringResult;
/**
*
* @author Jonas Partner
*
*/
public class XmlMarshallingTransformerParserTests {
@@ -43,16 +42,16 @@ public class XmlMarshallingTransformerParserTests {
@Before
public void setUp(){
public void setUp() {
this.appContext = new ClassPathXmlApplicationContext("XmlMarshallingTransformerParserTests-context.xml", getClass());
}
@Test
public void testDefault() throws Exception {
MessageTransformer transformer = (MessageTransformer) appContext.getBean("marshallingTransfomerNoResultFactory");
MessageHandler transformer = (MessageHandler) appContext.getBean("marshallingTransfomerNoResultFactory");
GenericMessage<Object> message = new GenericMessage<Object>("hello");
Message<?> result = transformer.transform(message);
Message<?> result = transformer.handle(message);
assertTrue("Wrong payload type", result.getPayload() instanceof DOMResult);
Document doc = (Document) ((DOMResult) result.getPayload()).getNode();
assertEquals("Wrong palyoad", "hello", doc.getDocumentElement().getTextContent());
@@ -60,9 +59,9 @@ public class XmlMarshallingTransformerParserTests {
@Test
public void testDOMResult() throws Exception {
MessageTransformer transformer = (MessageTransformer) appContext.getBean("marshallingTransfomerDOMResultFactory");
MessageHandler transformer = (MessageHandler) appContext.getBean("marshallingTransfomerDOMResultFactory");
GenericMessage<Object> message = new GenericMessage<Object>("hello");
Message<?> result = transformer.transform(message);
Message<?> result = transformer.handle(message);
assertTrue("Wrong payload type ", result.getPayload() instanceof DOMResult);
Document doc = (Document) ((DOMResult) result.getPayload()).getNode();
assertEquals("Wrong palyoad", "hello", doc.getDocumentElement().getTextContent());
@@ -70,9 +69,9 @@ public class XmlMarshallingTransformerParserTests {
@Test
public void testStringResult() throws Exception {
MessageTransformer transformer = (MessageTransformer) appContext.getBean("marshallingTransfomerStringResultFactory");
MessageHandler transformer = (MessageHandler) appContext.getBean("marshallingTransfomerStringResultFactory");
GenericMessage<Object> message = new GenericMessage<Object>("hello");
Message<?> result = transformer.transform(message);
Message<?> result = transformer.handle(message);
assertTrue("Wrong payload type", result.getPayload() instanceof StringResult);
}

View File

@@ -26,10 +26,10 @@ import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.integration.handler.MessageHandler;
import org.springframework.integration.message.GenericMessage;
import org.springframework.integration.message.Message;
import org.springframework.integration.message.MessagingException;
import org.springframework.integration.transformer.MessageTransformer;
import org.springframework.integration.xml.util.XmlTestUtil;
import org.springframework.xml.transform.StringSource;
@@ -38,9 +38,9 @@ import org.springframework.xml.transform.StringSource;
*/
public class XmlUnmarshallingTransformerParserTests {
ApplicationContext appContext;
private ApplicationContext appContext;
StubUnmarshaller unmarshaller;
private StubUnmarshaller unmarshaller;
@Before
@@ -53,41 +53,41 @@ public class XmlUnmarshallingTransformerParserTests {
@Test
public void testDefaultUnmarshall() throws Exception {
MessageTransformer transformer = (MessageTransformer) appContext.getBean("defaultUnmarshaller");
MessageHandler transformer = (MessageHandler) appContext.getBean("defaultUnmarshaller");
GenericMessage<Object> message = new GenericMessage<Object>(new StringSource(
"<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?><order><orderItem>test</orderItem></order>"));
Message<?> result = transformer.transform(message);
Message<?> result = transformer.handle(message);
assertEquals("Wrong payload after unmarshalling", "unmarshalled", result.getPayload());
assertTrue("Wrong source passed to unmarshaller", unmarshaller.sourcesPassed.poll() instanceof StringSource);
}
@Test
public void testUnmarshallString() throws Exception {
MessageTransformer transformer = (MessageTransformer) appContext.getBean("defaultUnmarshaller");
MessageHandler transformer = (MessageHandler) appContext.getBean("defaultUnmarshaller");
GenericMessage<Object> message = new GenericMessage<Object>(
"<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?><order><orderItem>test</orderItem></order>");
Message<?> result = transformer.transform(message);
Message<?> result = transformer.handle(message);
assertEquals("Wrong payload after unmarshalling", "unmarshalled", result.getPayload());
assertTrue("Wrong source passed to unmarshaller", unmarshaller.sourcesPassed.poll() instanceof DOMSource);
}
@Test
public void testUnmarshallDocument() throws Exception {
MessageTransformer transformer = (MessageTransformer) appContext.getBean("defaultUnmarshaller");
MessageHandler transformer = (MessageHandler) appContext.getBean("defaultUnmarshaller");
GenericMessage<Object> message = new GenericMessage<Object>(
XmlTestUtil
.getDocumentForString("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?><order><orderItem>test</orderItem></order>"));
Message<?> result = transformer.transform(message);
Message<?> result = transformer.handle(message);
assertEquals("Wrong payload after unmarshalling", "unmarshalled", result.getPayload());
assertTrue("Wrong source passed to unmarshaller", unmarshaller.sourcesPassed.poll() instanceof DOMSource);
}
@Test(expected = MessagingException.class)
public void testUnmarshallUnsupported() throws Exception {
MessageTransformer transformer = (MessageTransformer) appContext.getBean("defaultUnmarshaller");
MessageHandler transformer = (MessageHandler) appContext.getBean("defaultUnmarshaller");
GenericMessage<Object> message = new GenericMessage<Object>(new StringBuffer(
"<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?><order><orderItem>test</orderItem></order>"));
transformer.transform(message);
transformer.handle(message);
}
}

View File

@@ -5,7 +5,7 @@
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/integration-xml http://www.springframework.org/schema/integration/spring-integration-xml-1.0.xsd">
<si-xml:xslt-transformer id="xsltTransfomerWithResource"
<si-xml:xslt-transformer id="xsltTransformerWithResource"
xsl-resource="org/springframework/integration/xml/config/test.xsl" />

View File

@@ -28,9 +28,9 @@ import org.w3c.dom.Document;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.integration.handler.MessageHandler;
import org.springframework.integration.message.GenericMessage;
import org.springframework.integration.message.Message;
import org.springframework.integration.transformer.MessageTransformer;
import org.springframework.integration.xml.util.XmlTestUtil;
/**
@@ -38,9 +38,9 @@ import org.springframework.integration.xml.util.XmlTestUtil;
*/
public class XsltPayloadTransformerParserTests {
String doc = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?><order><orderItem>test</orderItem></order>";
private String doc = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?><order><orderItem>test</orderItem></order>";
ApplicationContext applicationContext;
private ApplicationContext applicationContext;
@Before
@@ -51,10 +51,10 @@ public class XsltPayloadTransformerParserTests {
@Test
public void testWithResourceProvided() throws Exception {
MessageTransformer messageTransformer = (MessageTransformer) applicationContext
.getBean("xsltTransfomerWithResource");
MessageHandler messageTransformer = (MessageHandler) applicationContext
.getBean("xsltTransformerWithResource");
GenericMessage<Object> message = new GenericMessage<Object>(XmlTestUtil.getDomSourceForString(doc));
Message<?> result = messageTransformer.transform(message);
Message<?> result = messageTransformer.handle(message);
assertTrue("Payload was not a DOMResult", result.getPayload() instanceof DOMResult);
Document doc = (Document) ((DOMResult) result.getPayload()).getNode();
assertEquals("Wrong payload", "test", doc.getDocumentElement().getTextContent());
@@ -62,10 +62,10 @@ public class XsltPayloadTransformerParserTests {
@Test
public void testWithTemplatesProvided() throws Exception {
MessageTransformer messageTransformer = (MessageTransformer) applicationContext
MessageHandler messageTransformer = (MessageHandler) applicationContext
.getBean("xsltTransformerWithTemplates");
GenericMessage<Object> message = new GenericMessage<Object>(XmlTestUtil.getDomSourceForString(doc));
Message<?> result = messageTransformer.transform(message);
Message<?> result = messageTransformer.handle(message);
assertTrue("Payload was not a DOMResult", result.getPayload() instanceof DOMResult);
Document doc = (Document) ((DOMResult) result.getPayload()).getNode();
assertEquals("Wrong payload", "test", doc.getDocumentElement().getTextContent());

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2007 the original author or authors.
* Copyright 2002-2008 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.
@@ -28,16 +28,14 @@ import javax.xml.transform.dom.DOMSource;
import org.junit.Before;
import org.junit.Test;
import org.springframework.integration.message.GenericMessage;
import org.springframework.integration.message.MessagingException;
import org.springframework.xml.transform.StringResult;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
import org.springframework.integration.message.MessagingException;
import org.springframework.xml.transform.StringResult;
/**
*
* @author Jonas Partner
*
*/
public class DomSourceFactoryTests {
@@ -56,8 +54,7 @@ public class DomSourceFactoryTests {
@Test
public void testWithDocumentPayload() throws Exception {
GenericMessage<Object> message = new GenericMessage<Object>(doc);
Source source = sourceFactory.getSourceForMessage(message);
Source source = sourceFactory.createSource(doc);
assertNotNull("Returned source was null", source);
assertEquals("Expected DOMSource", DOMSource.class, source.getClass());
assertEquals("Wrong content in source ", docContent, getAsString(source));
@@ -65,8 +62,7 @@ public class DomSourceFactoryTests {
@Test
public void testWithStringPayload() throws Exception {
GenericMessage<Object> message = new GenericMessage<Object>(docContent);
Source source = sourceFactory.getSourceForMessage(message);
Source source = sourceFactory.createSource(docContent);
assertNotNull("Returned source was null", source);
assertEquals("Expected DOMSource", DOMSource.class, source.getClass());
assertEquals("Wrong content in source ", docContent, getAsString(source));
@@ -74,11 +70,11 @@ public class DomSourceFactoryTests {
@Test(expected = MessagingException.class)
public void testWithUnsupportedPayload() throws Exception {
GenericMessage<Object> message = new GenericMessage<Object>(12);
sourceFactory.getSourceForMessage(message);
sourceFactory.createSource(new Integer(12));
}
String getAsString(Source source) throws Exception {
private String getAsString(Source source) throws Exception {
Transformer transformer = TransformerFactory.newInstance().newTransformer();
StringResult res = new StringResult();
transformer.transform(source, res);

View File

@@ -24,11 +24,8 @@ import javax.xml.transform.sax.SAXResult;
import org.junit.Before;
import org.junit.Test;
import org.w3c.dom.Document;
import org.springframework.integration.message.GenericMessage;
import org.springframework.integration.message.Message;
import org.springframework.integration.message.MessagingException;
import org.springframework.integration.xml.util.XmlTestUtil;
import org.springframework.xml.transform.StringResult;
@@ -38,9 +35,9 @@ import org.springframework.xml.transform.StringResult;
*/
public class ResultToDocumentTransformerTests {
String doc = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?><order><orderItem>test</orderItem></order>";
private String doc = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?><order><orderItem>test</orderItem></order>";
ResultToDocumentTransformer resToDocTransformer;
private ResultToDocumentTransformer resToDocTransformer;
@Before
@@ -52,27 +49,25 @@ public class ResultToDocumentTransformerTests {
@Test
public void testWithDomResult() throws Exception {
DOMResult result = XmlTestUtil.getDomResultForString(doc);
GenericMessage<Object> message = new GenericMessage<Object>(result);
Message<?> transformed = resToDocTransformer.transform(message);
assertTrue("Wrong payload type expected Document", transformed.getPayload() instanceof Document);
Document doc = (Document) transformed.getPayload();
Object transformed = resToDocTransformer.transform(result);
assertTrue("Wrong transformed type expected Document", transformed instanceof Document);
Document doc = (Document) transformed;
assertEquals("Wrong root element name", "order", doc.getDocumentElement().getNodeName());
}
@Test
public void testWithStringResult() throws Exception {
StringResult result = XmlTestUtil.getStringResultForString(doc);
GenericMessage<Object> message = new GenericMessage<Object>(result);
Message<?> transformed = resToDocTransformer.transform(message);
assertTrue("Wrong payload type expected Document", transformed.getPayload() instanceof Document);
Document doc = (Document) transformed.getPayload();
Object transformed = resToDocTransformer.transform(result);
assertTrue("Wrong transformed type expected Document", transformed instanceof Document);
Document doc = (Document) transformed;
assertEquals("Wrong root element name", "order", doc.getDocumentElement().getNodeName());
}
@Test(expected = MessagingException.class)
public void testWithUnsupportedSaxResult() throws Exception {
SAXResult result = new SAXResult();
GenericMessage<Object> message = new GenericMessage<Object>(result);
resToDocTransformer.transform(message);
resToDocTransformer.transform(result);
}
}

View File

@@ -26,8 +26,6 @@ import javax.xml.transform.Result;
import javax.xml.transform.dom.DOMResult;
import org.junit.Test;
import org.springframework.integration.message.Message;
import org.springframework.integration.message.StringMessage;
import org.springframework.integration.xml.result.StringResultFactory;
import org.springframework.oxm.Marshaller;
import org.springframework.oxm.XmlMappingException;
@@ -43,10 +41,9 @@ public class XmlPayloadMarshallingTransformerTests {
TestMarshaller marshaller = new TestMarshaller();
XmlPayloadMarshallingTransformer transformer = new XmlPayloadMarshallingTransformer(marshaller);
transformer.setResultFactory(new StringResultFactory());
Message<?> message = new StringMessage("world");
Message<?> result = transformer.transform(message);
assertEquals(StringResult.class, result.getPayload().getClass());
assertEquals("hello world", result.getPayload().toString());
Object result = transformer.transform("world");
assertEquals(StringResult.class, result.getClass());
assertEquals("hello world", result.toString());
assertEquals("world", marshaller.payloads.get(0));
}
@@ -54,16 +51,15 @@ public class XmlPayloadMarshallingTransformerTests {
public void testDefaultResultFactory() {
TestMarshaller marshaller = new TestMarshaller();
XmlPayloadMarshallingTransformer transformer = new XmlPayloadMarshallingTransformer(marshaller);
Message<?> message = new StringMessage("world");
Message<?> result = transformer.transform(message);
assertEquals(DOMResult.class, result.getPayload().getClass());
Object result = transformer.transform("world");
assertEquals(DOMResult.class, result.getClass());
assertEquals("world", marshaller.payloads.get(0));
}
private static class TestMarshaller implements Marshaller {
List<Object> payloads = new ArrayList<Object>();
private List<Object> payloads = new ArrayList<Object>();
@SuppressWarnings("unchecked")
public boolean supports(Class clazz) {

View File

@@ -24,8 +24,6 @@ import javax.xml.transform.Source;
import org.junit.Test;
import org.springframework.integration.message.GenericMessage;
import org.springframework.integration.message.Message;
import org.springframework.oxm.Unmarshaller;
import org.springframework.oxm.XmlMappingException;
import org.springframework.xml.transform.StringSource;
@@ -39,10 +37,9 @@ public class XmlPayloadUnmarshallingTransformerTests {
public void testStringSourceToString() {
Unmarshaller unmarshaller = new TestUnmarshaller();
XmlPayloadUnmarshallingTransformer transformer = new XmlPayloadUnmarshallingTransformer(unmarshaller);
Message<?> message = new GenericMessage<StringSource>(new StringSource("world"));
Message<?> transformed = transformer.transform(message);
assertEquals(String.class, transformed.getPayload().getClass());
assertEquals("hello world", transformed.getPayload().toString());
Object transformed = transformer.transform(new StringSource("world"));
assertEquals(String.class, transformed.getClass());
assertEquals("hello world", transformed.toString());
}

View File

@@ -18,7 +18,6 @@ package org.springframework.integration.xml.transformer;
import static org.junit.Assert.assertEquals;
import javax.xml.transform.Source;
import javax.xml.transform.dom.DOMResult;
import org.junit.Before;
@@ -28,10 +27,7 @@ import org.w3c.dom.Document;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.core.io.Resource;
import org.springframework.integration.message.GenericMessage;
import org.springframework.integration.message.Message;
import org.springframework.integration.message.MessagingException;
import org.springframework.integration.message.StringMessage;
import org.springframework.integration.xml.util.XmlTestUtil;
import org.springframework.xml.transform.StringSource;
@@ -40,48 +36,49 @@ import org.springframework.xml.transform.StringSource;
*/
public class XsltPayloadTransformerTest {
XsltPayloadTransformer transformer;
private XsltPayloadTransformer transformer;
private String doc = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?><order><orderItem>test</orderItem></order>";
String doc = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?><order><orderItem>test</orderItem></order>";
@Before
public void setUp() throws Exception {
transformer = new XsltPayloadTransformer(getXslResource());
}
@Test
public void testDocumentAsPayload() throws Exception {
GenericMessage<Document> documentMessage = new GenericMessage<Document>(XmlTestUtil.getDocumentForString(doc));
transformer.transform(documentMessage);
Object transformed = transformer.transform(XmlTestUtil.getDocumentForString(doc));
DOMResult result = (DOMResult) transformed;
String rootNodeName = ((Document) result.getNode()).getDocumentElement().getNodeName();
assertEquals("Wrong name for root element after transform", "bob", rootNodeName);
}
@Test
public void testSourceAsPayload() throws Exception {
GenericMessage<Source> message = new GenericMessage<Source>(new StringSource(doc));
Message<?> transformed = transformer.transform(message);
DOMResult result = (DOMResult) transformed.getPayload();
Object transformed = transformer.transform(new StringSource(doc));
DOMResult result = (DOMResult) transformed;
String rootNodeName = ((Document) result.getNode()).getDocumentElement().getNodeName();
assertEquals("Wrong name for root element after transform", "bob", rootNodeName);
}
@Test
public void testStringAsPayload() throws Exception {
GenericMessage<Object> message = new GenericMessage<Object>(doc);
Message<?> transformed = transformer.transform(message);
DOMResult result = (DOMResult) transformed.getPayload();
Object transformed = transformer.transform(doc);
DOMResult result = (DOMResult) transformed;
String rootNodeName = ((Document) result.getNode()).getDocumentElement().getNodeName();
assertEquals("Wrong name for root element after transform", "bob", rootNodeName);
}
@Test(expected = MessagingException.class)
public void testNonXmlString() throws Exception {
transformer.transform(new StringMessage("test"));
transformer.transform("test");
}
@Test(expected = MessagingException.class)
public void testUnsupportedPayloadType() throws Exception {
transformer.transform(new GenericMessage<Long>(new Long(12)));
transformer.transform(new Long(12));
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2007 the original author or authors.
* Copyright 2002-2008 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.
@@ -25,14 +25,15 @@ import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMResult;
import javax.xml.transform.dom.DOMSource;
import org.springframework.xml.transform.StringResult;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
import org.springframework.xml.transform.StringResult;
/**
* Utill class for XML related testing
* @author Jonas Partner
* Utility class for XML related testing
*
* @author Jonas Partner
*/
public class XmlTestUtil {