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