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