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