1
2
3
4
5
6
7
8
9
10
11 package org.mule.transformers.xml;
12
13 import org.mule.impl.RequestContext;
14 import org.mule.tck.MuleTestUtils;
15 import org.mule.umo.UMOEvent;
16 import org.mule.umo.lifecycle.InitialisationException;
17 import org.mule.umo.transformer.TransformerException;
18 import org.mule.umo.transformer.UMOTransformer;
19 import org.mule.util.IOUtils;
20
21 import java.util.HashMap;
22 import java.util.Map;
23
24 public class XsltTransformerTestCase extends AbstractXmlTransformerTestCase
25 {
26
27 private String srcData;
28 private String resultData;
29
30
31 protected void doSetUp() throws Exception
32 {
33 srcData = IOUtils.getResourceAsString("cdcatalog.xml", getClass());
34 resultData = IOUtils.getResourceAsString("cdcatalog.html", getClass());
35 }
36
37 public UMOTransformer getTransformer() throws Exception
38 {
39 XsltTransformer transformer = new XsltTransformer();
40 transformer.setXslFile("cdcatalog.xsl");
41 transformer.setMaxActiveTransformers(42);
42 transformer.initialise();
43 return transformer;
44 }
45
46 public UMOTransformer getRoundTripTransformer() throws Exception
47 {
48 return null;
49 }
50
51
52 public void testRoundtripTransform() throws Exception
53 {
54
55 }
56
57 public Object getTestData()
58 {
59 return srcData;
60 }
61
62 public Object getResultData()
63 {
64 return resultData;
65 }
66
67 public void testCustomTransformerFactoryClass() throws InitialisationException
68 {
69 XsltTransformer t = new XsltTransformer();
70 t.setXslTransformerFactory("com.nosuchclass.TransformerFactory");
71 t.setXslFile("cdcatalog.xsl");
72
73 try
74 {
75 t.initialise();
76 fail("should have failed with ClassNotFoundException");
77 }
78 catch (InitialisationException iex)
79 {
80 assertEquals(ClassNotFoundException.class, iex.getCause().getClass());
81 }
82
83
84 t.setXslTransformerFactory(null);
85 t.initialise();
86 }
87
88
89 protected void doTestClone(UMOTransformer original, UMOTransformer clone) throws Exception
90 {
91 super.doTestClone(original, clone);
92
93 XsltTransformer t1 = (XsltTransformer) original;
94 XsltTransformer t2 = (XsltTransformer) clone;
95
96
97 assertNotSame("transformerPool", t1.transformerPool, t2.transformerPool);
98
99 assertEquals("transformerPool.maxActive", t1.getMaxActiveTransformers(),
100 t2.getMaxActiveTransformers());
101 }
102
103 public void testTransformWithStaticParam() throws TransformerException, InitialisationException
104 {
105
106 String xml =
107 "<node1>" +
108 "<subnode1>sub node 1 original value</subnode1>" +
109 "<subnode2>sub node 2 original value</subnode2>" +
110 "</node1>";
111
112 String param = "sub node 2 cool new value";
113
114 String expectedTransformedxml =
115 "<node1>" +
116 "<subnode1>sub node 1 original value</subnode1>" +
117 "<subnode2>" + param + "</subnode2>" +
118 "</node1>";
119
120 String xsl =
121 "<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"2.0\"" +
122 " xmlns:wsdlsoap=\"http://schemas.xmlsoap.org/wsdl/soap/\"" +
123 " xmlns:wsdl=\"http://schemas.xmlsoap.org/wsdl/\">" +
124 "<xsl:param name=\"param1\"/>" +
125 "<xsl:template match=\"@*|node()\">" +
126 "<xsl:copy><xsl:apply-templates select=\"@*|node()\"/></xsl:copy>" +
127 "</xsl:template>" +
128 "<xsl:template match=\"/node1/subnode2/text()\">" +
129 "<xsl:value-of select=\"$param1\"/>" +
130 "</xsl:template>" +
131 "</xsl:stylesheet>";
132
133 XsltTransformer transformer = new XsltTransformer();
134
135
136 transformer.setXslt(xsl);
137
138
139 Map params = new HashMap();
140 params.put("param1", param);
141 transformer.setTransformParameters(params);
142
143
144 transformer.initialise();
145
146
147 String transformerResult = (String) transformer.transform(xml);
148
149
150 transformerResult = transformerResult.substring(transformerResult.indexOf("?>") + 2);
151
152 assertTrue(transformerResult.indexOf(expectedTransformedxml) > -1);
153
154 }
155
156 public void testTransformWithDynamicParam() throws Exception
157 {
158
159 String xml =
160 "<node1>" +
161 "<subnode1>sub node 1 original value</subnode1>" +
162 "<subnode2>sub node 2 original value</subnode2>" +
163 "</node1>";
164
165 String param = "sub node 2 cool new value";
166
167 String expectedTransformedxml =
168 "<node1>" +
169 "<subnode1>sub node 1 original value</subnode1>" +
170 "<subnode2>" + param + "</subnode2>" +
171 "</node1>";
172
173 String xsl =
174 "<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"2.0\"" +
175 " xmlns:wsdlsoap=\"http://schemas.xmlsoap.org/wsdl/soap/\"" +
176 " xmlns:wsdl=\"http://schemas.xmlsoap.org/wsdl/\">" +
177 "<xsl:param name=\"param1\"/>" +
178 "<xsl:template match=\"@*|node()\">" +
179 "<xsl:copy><xsl:apply-templates select=\"@*|node()\"/></xsl:copy>" +
180 "</xsl:template>" +
181 "<xsl:template match=\"/node1/subnode2/text()\">" +
182 "<xsl:value-of select=\"$param1\"/>" +
183 "</xsl:template>" +
184 "</xsl:stylesheet>";
185
186 XsltTransformer transformer = new XsltTransformer();
187
188
189 transformer.setXslt(xsl);
190
191
192 Map params = new HashMap();
193 params.put("param1", "#getProperty(message,'myproperty')");
194 transformer.setTransformParameters(params);
195
196
197 transformer.initialise();
198
199
200 UMOEvent event = MuleTestUtils.getTestEvent("test message data");
201 event.getMessage().setProperty("myproperty", param);
202 RequestContext.setEvent(event);
203
204
205 String transformerResult = (String) transformer.transform(xml);
206
207
208 transformerResult = transformerResult.substring(transformerResult.indexOf("?>") + 2);
209
210 assertTrue(transformerResult.indexOf(expectedTransformedxml) > -1);
211 }
212
213 }