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.endpoint.EndpointBuilder;
10  import org.mule.api.endpoint.InboundEndpoint;
11  import org.mule.api.routing.filter.Filter;
12  import org.mule.api.transformer.Transformer;
13  import org.mule.jaxb.model.Person;
14  import org.mule.module.xml.filters.JXPathFilter;
15  import org.mule.module.xml.filters.JaxenFilter;
16  import org.mule.module.xml.filters.SchemaValidationFilter;
17  import org.mule.module.xml.transformer.JXPathExtractor;
18  import org.mule.module.xml.transformer.jaxb.JAXBMarshallerTransformer;
19  import org.mule.module.xml.transformer.jaxb.JAXBUnmarshallerTransformer;
20  import org.mule.module.xml.util.NamespaceManager;
21  import org.mule.tck.junit4.FunctionalTestCase;
22  
23  import org.junit.Test;
24  import org.w3c.dom.ls.LSInput;
25  import org.w3c.dom.ls.LSResourceResolver;
26  import org.xml.sax.ErrorHandler;
27  import org.xml.sax.SAXException;
28  import org.xml.sax.SAXParseException;
29  
30  import static org.junit.Assert.assertEquals;
31  import static org.junit.Assert.assertFalse;
32  import static org.junit.Assert.assertNotNull;
33  import static org.junit.Assert.assertTrue;
34  
35  public class XmlNamespaceTestCase extends FunctionalTestCase
36  {
37  
38      public XmlNamespaceTestCase()
39      {
40          setDisposeContextPerClass(true);
41      }
42  
43      @Override
44      protected String getConfigResources()
45      {
46          return "xml-namespace-config.xml";
47      }
48  
49      @Test
50      public void testGlobalNamespaces() throws Exception
51      {
52          NamespaceManager manager = muleContext.getRegistry().lookupObject(NamespaceManager.class);
53          assertNotNull(manager);
54          assertTrue(manager.isIncludeConfigNamespaces());
55          assertEquals(5, manager.getNamespaces().size());
56      }
57  
58      @Test
59      public void testJXPathFilterConfig() throws Exception
60      {
61          EndpointBuilder epb = muleContext.getRegistry().lookupEndpointBuilder("test.ep1");
62  
63          InboundEndpoint ep = epb.buildInboundEndpoint();
64          assertNotNull(ep.getFilter());
65          assertTrue(ep.getFilter() instanceof JXPathFilter);
66          JXPathFilter filter = (JXPathFilter)ep.getFilter();
67          assertEquals("/bar:foo/bar:bar", filter.getPattern());
68          assertEquals(6, filter.getNamespaces().size());
69          assertEquals("http://bar.com", filter.getNamespaces().get("bar"));
70      }
71  
72      @Test
73      public void testJaxenFilterConfig() throws Exception
74      {
75          EndpointBuilder epb = muleContext.getRegistry().lookupEndpointBuilder("test.ep2");
76  
77          InboundEndpoint ep = epb.buildInboundEndpoint();
78          assertNotNull(ep.getFilter());
79          assertTrue(ep.getFilter() instanceof JaxenFilter);
80          JaxenFilter filter = (JaxenFilter)ep.getFilter();
81          assertEquals("/car:foo/car:bar", filter.getPattern());
82          assertEquals(6, filter.getNamespaces().size());
83          assertEquals("http://car.com", filter.getNamespaces().get("car"));
84      }
85  
86      @Test
87      public void testJXPathExtractor() throws Exception
88      {
89          JXPathExtractor transformer = (JXPathExtractor) lookupTransformer("jxpath-extractor");
90          transformer.initialise();
91          assertNotNull(transformer.getNamespaces());
92          assertEquals(6, transformer.getNamespaces().size());
93          assertNotNull(transformer.getNamespaces().get("foo"));
94          assertNotNull(transformer.getNamespaces().get("bar"));
95      }
96  
97      @Test
98      public void testJaxbConfig() throws Exception
99      {
100         JAXBMarshallerTransformer t = (JAXBMarshallerTransformer) lookupTransformer("ObjectToXml");
101         assertNotNull(t.getJaxbContext());
102 
103         JAXBUnmarshallerTransformer t2 = (JAXBUnmarshallerTransformer) lookupTransformer("XmlToObject");
104         assertEquals(Person.class, t2.getReturnDataType().getType());
105         assertNotNull(t2.getJaxbContext());
106     }
107     
108     @Test
109     public void testSchemaValidationFilterWithCustomResourceResolver()
110     {
111         SchemaValidationFilter filter = (SchemaValidationFilter) lookupFilter("SchemaValidationWithResourceResolver");
112         assertEquals("schema1.xsd", filter.getSchemaLocations());
113         assertTrue(filter.getResourceResolver() instanceof MockResourceResolver);
114         assertTrue(filter.getErrorHandler() instanceof MockErrorHandler);
115         assertFalse(filter.isReturnResult());
116     }
117     
118     private Transformer lookupTransformer(String name)
119     {
120         Transformer transformer = muleContext.getRegistry().lookupTransformer(name);
121         assertNotNull(transformer);
122         return transformer;
123     }
124     
125     private Filter lookupFilter(String name)
126     {
127         Filter filter = muleContext.getRegistry().lookupObject(name);
128         assertNotNull(filter);
129         return filter;
130     }
131     
132     private static class MockResourceResolver implements LSResourceResolver
133     {
134         public LSInput resolveResource(String type, String namespaceURI, String publicId, 
135             String systemId, String baseURI)
136         {
137             return null;
138         }
139     }
140     
141     private static class MockErrorHandler implements ErrorHandler
142     {
143         public void error(SAXParseException exception) throws SAXException
144         {
145             // does nothing
146         }
147 
148         public void fatalError(SAXParseException exception) throws SAXException
149         {
150             // does nothing
151         }
152 
153         public void warning(SAXParseException exception) throws SAXException
154         {
155             // does nothing
156         }
157     }
158 }