View Javadoc

1   /*
2    * $Id:XsltTransformerTestCase.java 5937 2007-04-09 22:35:04Z rossmason $
3    * --------------------------------------------------------------------------------------
4    * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
5    *
6    * The software in this package is published under the terms of the CPAL v1.0
7    * license, a copy of which has been included with this distribution in the
8    * LICENSE.txt file.
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          //Will default to JDK
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          // disable this test
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         // try again with JDK default
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         // set stylesheet
176         transformer.setXslt(xsl);
177 
178         // set parameter
179         Map params = new HashMap();
180         params.put("param1", param);
181         transformer.setContextProperties(params);
182 
183         // init transformer
184         transformer.initialise();
185 
186         // do transformation
187         String transformerResult = (String) transformer.transform(xml);
188 
189         // remove doc type and CRLFs
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         // set stylesheet
232         transformer.setXslt(xsl);
233 
234         // set parameter
235         Map params = new HashMap();
236         params.put("param1", "#[header:myproperty]");
237         transformer.setContextProperties(params);
238 
239         // init transformer
240         transformer.initialise();
241 
242         MuleMessage message = new DefaultMuleMessage(xml, muleContext);
243         message.setOutboundProperty("myproperty", param);
244         // do transformation
245         String transformerResult = (String) transformer.transform(message);
246 
247         // remove doc type and CRLFs
248         transformerResult = transformerResult.substring(transformerResult.indexOf("?>") + 2);
249 
250         assertTrue(transformerResult.indexOf(expectedTransformedxml) > -1);
251     }
252 
253 }