1
2
3
4
5
6
7
8
9
10
11 package org.mule.transformers.xml;
12
13 import org.mule.DefaultMuleMessage;
14 import org.mule.api.MuleMessage;
15 import org.mule.api.lifecycle.InitialisationException;
16 import org.mule.api.transformer.Transformer;
17 import org.mule.api.transformer.TransformerException;
18 import org.mule.module.xml.transformer.XsltTransformer;
19 import org.mule.module.xml.util.XMLTestUtils;
20 import org.mule.module.xml.util.XMLUtils;
21 import org.mule.transformer.types.DataTypeFactory;
22 import org.mule.util.IOUtils;
23
24 import java.io.InputStream;
25 import java.util.HashMap;
26 import java.util.Iterator;
27 import java.util.List;
28 import java.util.Map;
29
30 import javax.xml.stream.XMLStreamReader;
31
32 import org.junit.Test;
33
34 import static org.junit.Assert.assertEquals;
35 import static org.junit.Assert.assertNotNull;
36 import static org.junit.Assert.assertTrue;
37 import static org.junit.Assert.fail;
38
39 public class XsltTransformerJDKTransformerTestCase extends AbstractXmlTransformerTestCase
40 {
41
42 private String srcData;
43 private String resultData;
44
45 @Override
46 protected void doSetUp() throws Exception
47 {
48 srcData = IOUtils.getResourceAsString("cdcatalog.xml", getClass());
49 resultData = IOUtils.getResourceAsString("cdcatalog.html", getClass());
50 }
51
52 @Override
53 public Transformer getTransformer() throws Exception
54 {
55 XsltTransformer transformer = new XsltTransformer();
56 transformer.setReturnDataType(DataTypeFactory.STRING);
57 transformer.setXslFile("cdcatalog.xsl");
58 transformer.setMaxActiveTransformers(42);
59
60 transformer.setXslTransformerFactory(null);
61 initialiseObject(transformer);
62 return transformer;
63 }
64
65 @Override
66 public Transformer getRoundTripTransformer() throws Exception
67 {
68 return null;
69 }
70
71 @Override
72 @Test
73 public void testRoundtripTransform() throws Exception
74 {
75
76 }
77
78 @Override
79 public Object getTestData()
80 {
81 Map props = new HashMap();
82 props.put("ListTitle", "MyList");
83 props.put("ListRating", new Integer(6));
84 return new DefaultMuleMessage(srcData, props, muleContext);
85 }
86
87 @Override
88 public Object getResultData()
89 {
90 return resultData;
91 }
92
93 @Test
94 public void testAllXmlMessageTypes() throws Exception
95 {
96 List list = XMLTestUtils.getXmlMessageVariants("cdcatalog.xml");
97 Iterator it = list.iterator();
98
99 Object expectedResult = getResultData();
100 assertNotNull(expectedResult);
101
102 Object msg, result;
103 while (it.hasNext())
104 {
105 msg = it.next();
106 result = getTransformer().transform(msg);
107 assertNotNull(result);
108 assertTrue("Test failed for message type: " + msg.getClass(), compareResults(expectedResult, result));
109 }
110 }
111
112 @Test
113 public void testTransformXMLStreamReader() throws Exception
114 {
115 Object expectedResult = getResultData();
116 assertNotNull(expectedResult);
117
118 XsltTransformer transformer = (XsltTransformer) getTransformer();
119
120 InputStream is = IOUtils.getResourceAsStream("cdcatalog.xml", XMLTestUtils.class);
121 XMLStreamReader sr = XMLUtils.toXMLStreamReader(transformer.getXMLInputFactory(), is);
122
123 Object result = transformer.transform(sr);
124 assertNotNull(result);
125 assertTrue("expected: " + expectedResult + "\nresult: " + result, compareResults(expectedResult, result));
126 }
127
128 @Test
129 public void testCustomTransformerFactoryClass() throws InitialisationException
130 {
131 XsltTransformer t = new XsltTransformer();
132 t.setXslTransformerFactory("com.nosuchclass.TransformerFactory");
133 t.setXslFile("cdcatalog.xsl");
134
135 try
136 {
137 t.initialise();
138 fail("should have failed with ClassNotFoundException");
139 }
140 catch (InitialisationException iex)
141 {
142 assertEquals(ClassNotFoundException.class, iex.getCause().getClass());
143 }
144
145 t = new XsltTransformer();
146 t.setXslFile("cdcatalog.xsl");
147
148 t.setXslTransformerFactory(null);
149 t.initialise();
150 }
151
152 @Test
153 public void testTransformWithStaticParam() throws TransformerException, InitialisationException
154 {
155
156 String xml =
157 "<node1>" +
158 "<subnode1>sub node 1 original value</subnode1>" +
159 "<subnode2>sub node 2 original value</subnode2>" +
160 "</node1>";
161
162 String param = "sub node 2 cool new value";
163
164 String expectedTransformedxml =
165 "<node1>" +
166 "<subnode1>sub node 1 original value</subnode1>" +
167 "<subnode2>" + param + "</subnode2>" +
168 "</node1>";
169
170 String xsl =
171 "<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"2.0\"" +
172 " xmlns:wsdlsoap=\"http://schemas.xmlsoap.org/wsdl/soap/\"" +
173 " xmlns:wsdl=\"http://schemas.xmlsoap.org/wsdl/\">" +
174 "<xsl:param name=\"param1\"/>" +
175 "<xsl:template match=\"@*|node()\">" +
176 "<xsl:copy><xsl:apply-templates select=\"@*|node()\"/></xsl:copy>" +
177 "</xsl:template>" +
178 "<xsl:template match=\"/node1/subnode2/text()\">" +
179 "<xsl:value-of select=\"$param1\"/>" +
180 "</xsl:template>" +
181 "</xsl:stylesheet>";
182
183 XsltTransformer transformer = new XsltTransformer();
184
185 transformer.setMuleContext(muleContext);
186 transformer.setReturnDataType(DataTypeFactory.STRING);
187
188 transformer.setXslt(xsl);
189
190
191 Map params = new HashMap();
192 params.put("param1", param);
193 transformer.setContextProperties(params);
194
195
196 transformer.initialise();
197
198
199 String transformerResult = (String) transformer.transform(xml);
200
201
202 transformerResult = transformerResult.substring(transformerResult.indexOf("?>") + 2);
203
204 assertTrue(transformerResult.indexOf(expectedTransformedxml) > -1);
205
206 }
207
208 @Test
209 public void testTransformWithDynamicParam() throws Exception
210 {
211
212 String xml =
213 "<node1>" +
214 "<subnode1>sub node 1 original value</subnode1>" +
215 "<subnode2>sub node 2 original value</subnode2>" +
216 "</node1>";
217
218 String param = "sub node 2 cool new value";
219
220 String expectedTransformedxml =
221 "<node1>" +
222 "<subnode1>sub node 1 original value</subnode1>" +
223 "<subnode2>" + param + "</subnode2>" +
224 "</node1>";
225
226 String xsl =
227 "<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"2.0\"" +
228 " xmlns:wsdlsoap=\"http://schemas.xmlsoap.org/wsdl/soap/\"" +
229 " xmlns:wsdl=\"http://schemas.xmlsoap.org/wsdl/\">" +
230 "<xsl:param name=\"param1\"/>" +
231 "<xsl:template match=\"@*|node()\">" +
232 "<xsl:copy><xsl:apply-templates select=\"@*|node()\"/></xsl:copy>" +
233 "</xsl:template>" +
234 "<xsl:template match=\"/node1/subnode2/text()\">" +
235 "<xsl:value-of select=\"$param1\"/>" +
236 "</xsl:template>" +
237 "</xsl:stylesheet>";
238
239 XsltTransformer transformer = new XsltTransformer();
240
241 transformer.setMuleContext(muleContext);
242 transformer.setReturnDataType(DataTypeFactory.STRING);
243 transformer.setMuleContext(muleContext);
244
245 transformer.setXslt(xsl);
246
247
248 Map params = new HashMap();
249 params.put("param1", "#[header:myproperty]");
250 transformer.setContextProperties(params);
251
252
253 transformer.initialise();
254
255 MuleMessage message = new DefaultMuleMessage(xml, muleContext);
256 message.setOutboundProperty("myproperty", param);
257
258 String transformerResult = (String) transformer.transform(message);
259
260
261 transformerResult = transformerResult.substring(transformerResult.indexOf("?>") + 2);
262
263 assertTrue(transformerResult.indexOf(expectedTransformedxml) > -1);
264 }
265
266 }