View Javadoc
1   /*
2    * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
3    * The software in this package is published under the terms of the CPAL v1.0
4    * license, a copy of which has been included with this distribution in the
5    * LICENSE.txt file.
6    */
7   package org.mule.module.xml.config;
8   
9   import org.mule.api.MuleException;
10  import org.mule.api.transformer.Transformer;
11  import org.mule.module.xml.transformer.AbstractXmlTransformer;
12  import org.mule.module.xml.transformer.DomDocumentToXml;
13  import org.mule.module.xml.transformer.JXPathExtractor;
14  import org.mule.module.xml.transformer.ObjectToXml;
15  import org.mule.module.xml.transformer.XmlToDomDocument;
16  import org.mule.module.xml.transformer.XmlToObject;
17  import org.mule.module.xml.transformer.XsltTransformer;
18  import org.mule.tck.junit4.FunctionalTestCase;
19  import org.mule.transformer.AbstractTransformer;
20  
21  import java.util.Map;
22  
23  import org.junit.Test;
24  
25  import static org.junit.Assert.assertEquals;
26  import static org.junit.Assert.assertFalse;
27  import static org.junit.Assert.assertNotNull;
28  import static org.junit.Assert.assertNull;
29  import static org.junit.Assert.assertTrue;
30  
31  public class XmlTransformerNamespaceHandlerTestCase extends FunctionalTestCase
32  {
33  
34      @Override
35      protected String getConfigResources()
36      {
37          return "org/mule/module/xml/xml-transformer-namespace-test.xml";
38      }
39  
40      @Test
41      public void testDomToXml()
42      {
43          getAndTestTransformer("domToXml", DomDocumentToXml.class);
44      }
45  
46      @Test
47      public void testJXPathExtractor()
48      {
49          JXPathExtractor extractor = (JXPathExtractor) getAndTestTransformer("jxpathExtractor",
50              JXPathExtractor.class);
51          assertEquals("/expression", extractor.getExpression());
52          assertFalse(extractor.isSingleResult());
53          assertEquals(JXPathExtractor.OUTPUT_TYPE_VALUE, extractor.getOutputType());
54          
55          Map ns = extractor.getNamespaces();
56          assertNotNull(ns);
57          
58          assertEquals("http://foo.com", ns.get("foo1"));
59          assertEquals("http://foo.com", ns.get("foo2"));
60      }
61  
62      @Test
63      public void testObjectToXml()
64      {
65          ObjectToXml objectToXml = (ObjectToXml) getAndTestTransformer("objectToXml", ObjectToXml.class);
66          assertTrue(objectToXml.isAcceptMuleMessage());
67      }
68  
69      @Test
70      public void testXmlToDom()
71      {
72          getAndTestTransformer("xmlToDom", XmlToDomDocument.class);
73      }
74  
75      @Test
76      public void testXmlToObject()
77      {
78          getAndTestTransformer("xmlToObject", XmlToObject.class);
79      }
80  
81      @Test
82      public void testXslt()
83      {
84          XsltTransformer xslt = (XsltTransformer) getAndTestTransformer("xslt", XsltTransformer.class);
85          assertEquals(10, xslt.getMaxActiveTransformers());
86          assertEquals(10, xslt.getMaxIdleTransformers());
87          assertEquals(CustomXsltTransformerFactory.class.getName(), xslt.getXslTransformerFactory());
88          assertNull(xslt.getXslFile());
89          assertNotNull(xslt.getXslt());
90          String transform = xslt.getXslt();
91          assertTrue(transform.indexOf("test for this string in test") > -1);
92  
93          assertEquals("#[header:foo]", xslt.getContextProperties().get("bar"));
94      }
95  
96      @Test
97      public void testDomToXmlOnEndpoint() throws MuleException
98      {
99          getAndTestEndpointTransformer("ep1", DomDocumentToXml.class);
100     }
101 
102     @Test
103     public void testJXPathExtractorOnEndpoint() throws MuleException
104     {
105         JXPathExtractor extractor = (JXPathExtractor) getAndTestEndpointTransformer("ep2",
106             JXPathExtractor.class);
107         assertEquals("/expression", extractor.getExpression());
108         assertFalse(extractor.isSingleResult());
109     }
110 
111     @Test
112     public void testObjectToXmlOnEndpoint() throws MuleException
113     {
114         ObjectToXml objectToXml = (ObjectToXml) getAndTestEndpointTransformer("ep3", ObjectToXml.class);
115         assertTrue(objectToXml.isAcceptMuleMessage());
116     }
117 
118     @Test
119     public void testXmlToDomOnEndpoint() throws MuleException
120     {
121         getAndTestEndpointTransformer("ep4", XmlToDomDocument.class);
122     }
123 
124     @Test
125     public void testXmlToObjectOnEndpoint() throws MuleException
126     {
127         getAndTestEndpointTransformer("ep5", XmlToObject.class);
128     }
129 
130     @Test
131     public void testXsltOnEndpoint() throws MuleException
132     {
133         XsltTransformer xslt = (XsltTransformer) getAndTestEndpointTransformer("ep6", XsltTransformer.class);
134         assertEquals(10, xslt.getMaxActiveTransformers());
135         assertEquals(10, xslt.getMaxIdleTransformers());
136         assertEquals(CustomXsltTransformerFactory.class.getName(), xslt.getXslTransformerFactory());
137         assertNotNull(xslt.getXslt());
138         String transform = xslt.getXslt();
139         assertTrue(transform.indexOf("test for this string in test") > -1);
140 
141         assertEquals("#[header:foo]", xslt.getContextProperties().get("bar"));
142     }
143 
144     protected AbstractTransformer getAndTestTransformer(String name, Class clazz)
145     {
146         assertTrue(AbstractTransformer.class.isAssignableFrom(clazz));
147         Transformer object= muleContext.getRegistry().lookupTransformer(name);
148 
149         assertNotNull(object);
150         assertTrue(clazz.isAssignableFrom(object.getClass()));
151         AbstractTransformer transformer = (AbstractTransformer) object;
152         assertAbstractTransformerOk(transformer, name);
153         return transformer;
154     }
155     
156     protected AbstractTransformer getAndTestEndpointTransformer(String endpointName, Class clazz) throws MuleException
157     {
158         assertTrue(AbstractTransformer.class.isAssignableFrom(clazz));
159         assertEquals(1, muleContext.getEndpointFactory().getInboundEndpoint(endpointName).getTransformers().size());
160         AbstractTransformer transformer= (AbstractTransformer) muleContext.getEndpointFactory().getInboundEndpoint(endpointName).getTransformers().get(0);
161 
162         assertNotNull(transformer);
163         assertTrue(clazz.isAssignableFrom(transformer.getClass()));
164         return transformer;
165     }
166 
167     protected void assertAbstractTransformerOk(AbstractTransformer transformer, String name)
168     {
169         assertTrue(transformer.isIgnoreBadInput());
170         assertEquals(Object.class, transformer.getReturnClass());
171         assertEquals(name, transformer.getName());
172         // AbstractXmlTransformer instances have an output encoding
173         if (transformer instanceof AbstractXmlTransformer)
174         {
175             assertEquals("foo", ((AbstractXmlTransformer) transformer).getOutputEncoding());
176         }
177     }
178 
179 }