1
2
3
4
5
6
7
8
9
10
11 package org.mule.module.xml.config;
12
13 import org.mule.api.processor.MessageProcessor;
14 import org.mule.api.processor.MessageProcessorChain;
15 import org.mule.api.routing.MatchableMessageProcessor;
16 import org.mule.api.routing.OutboundRouterCollection;
17 import org.mule.api.service.Service;
18 import org.mule.construct.Flow;
19 import org.mule.module.xml.filters.IsXmlFilter;
20 import org.mule.module.xml.filters.JXPathFilter;
21 import org.mule.routing.MessageFilter;
22 import org.mule.routing.filters.logic.NotFilter;
23 import org.mule.routing.outbound.FilteringOutboundRouter;
24 import org.mule.tck.AbstractServiceAndFlowTestCase;
25
26 import java.lang.reflect.Field;
27 import java.util.ArrayList;
28 import java.util.Arrays;
29 import java.util.Collection;
30 import java.util.List;
31 import java.util.Map;
32
33 import org.junit.Test;
34 import org.junit.runners.Parameterized.Parameters;
35
36 import static org.junit.Assert.assertEquals;
37 import static org.junit.Assert.assertNotNull;
38 import static org.junit.Assert.assertTrue;
39 import static org.junit.Assert.fail;
40
41 public class XmlFilterNamespaceHandlerTestCase extends AbstractServiceAndFlowTestCase
42 {
43 @Parameters
44 public static Collection<Object[]> parameters()
45 {
46 return Arrays.asList(new Object[][]{
47 {ConfigVariant.SERVICE, "org/mule/module/xml/xml-filter-functional-test-service.xml"},
48 {ConfigVariant.FLOW, "org/mule/module/xml/xml-filter-functional-test-flow.xml"}});
49 }
50
51 public XmlFilterNamespaceHandlerTestCase(ConfigVariant variant, String configResources)
52 {
53 super(variant, configResources);
54 }
55
56
57
58
59
60
61
62
63
64 @Test
65 public void testIsXmlFilter()
66 throws IllegalArgumentException, IllegalAccessException, SecurityException, NoSuchFieldException
67 {
68 Object serviceFlow = muleContext.getRegistry().lookupObject("test for xml");
69
70 if (serviceFlow instanceof Service)
71 {
72 List<MatchableMessageProcessor> routers =
73 ((OutboundRouterCollection) ((Service) serviceFlow).getOutboundMessageProcessor()).getRoutes();
74
75 assertEquals(2, routers.size());
76 assertTrue(routers.get(0).getClass().getName(), routers.get(0) instanceof FilteringOutboundRouter);
77 assertTrue(((FilteringOutboundRouter) routers.get(0)).getFilter() instanceof IsXmlFilter);
78 assertTrue(routers.get(1).getClass().getName(), routers.get(1) instanceof FilteringOutboundRouter);
79 assertTrue(((FilteringOutboundRouter) routers.get(1)).getFilter() instanceof NotFilter);
80 assertTrue(((NotFilter) ((FilteringOutboundRouter) routers.get(1)).getFilter()).getFilter() instanceof IsXmlFilter);
81
82 }
83 else if (serviceFlow instanceof Flow)
84 {
85 Object notXmlSubFlowWrapper;
86 Field f;
87 MessageProcessorChain notXmlSubFlow;
88 List<MessageProcessor> outEndpoints = new ArrayList<MessageProcessor>(2);
89
90 outEndpoints.add(((Flow) serviceFlow).getMessageProcessors().get(0));
91 notXmlSubFlowWrapper = muleContext.getRegistry().lookupObject("notXml");
92
93 f = notXmlSubFlowWrapper.getClass().getDeclaredField("delegate");
94 f.setAccessible(true);
95 notXmlSubFlow = (MessageProcessorChain) f.get(notXmlSubFlowWrapper);
96 outEndpoints.add((notXmlSubFlow.getMessageProcessors().get(0)));
97
98 assertEquals(2, outEndpoints.size());
99 assertTrue(outEndpoints.get(0).getClass().getName(), outEndpoints.get(0) instanceof MessageFilter);
100 assertTrue(((MessageFilter) outEndpoints.get(0)).getFilter() instanceof IsXmlFilter);
101 assertTrue(outEndpoints.get(1).getClass().getName(), outEndpoints.get(1) instanceof MessageFilter);
102 assertTrue(((MessageFilter) outEndpoints.get(1)).getFilter() instanceof NotFilter);
103 assertTrue(((NotFilter) ((MessageFilter) outEndpoints.get(1)).getFilter()).getFilter() instanceof IsXmlFilter);
104 }
105 else
106 {
107 fail("Unexpected Object");
108 }
109 }
110
111 @Test
112 public void testJXPathFilter()
113 {
114 Object serviceFlow = null;
115
116 serviceFlow = muleContext.getRegistry().lookupObject("filter xml for content");
117
118 if (serviceFlow instanceof Service)
119 {
120
121 List<MatchableMessageProcessor> routers =
122 ((OutboundRouterCollection) ((Service) serviceFlow).getOutboundMessageProcessor()).getRoutes();
123 assertEquals(1, routers.size());
124 assertTrue(routers.get(0).getClass().getName(), routers.get(0) instanceof FilteringOutboundRouter);
125 assertTrue(((FilteringOutboundRouter) routers.get(0)).getFilter() instanceof JXPathFilter);
126 JXPathFilter filter = (JXPathFilter) ((FilteringOutboundRouter) routers.get(0)).getFilter();
127 assertEquals("filter xml for content", filter.getExpectedValue());
128 assertEquals("/mule:mule/mule:model/mule:service[2]/@name", filter.getPattern());
129 assertNotNull(filter.getNamespaces());
130 Map<?, ?> namespaces = filter.getNamespaces();
131 assertEquals(2, namespaces.size());
132 assertEquals("http://www.springframework.org/schema/beans", namespaces.get("spring"));
133 assertTrue(namespaces.get("mule")
134 .toString()
135 .startsWith("http://www.mulesoft.org/schema/mule/core"));
136
137 }
138 else if (serviceFlow instanceof Flow)
139 {
140
141 List<MessageProcessor> outEndpoints = new ArrayList<MessageProcessor>(1);
142 outEndpoints.add(((Flow) serviceFlow).getMessageProcessors().get(0));
143
144 assertEquals(1, outEndpoints.size());
145 assertTrue(outEndpoints.get(0).getClass().getName(), outEndpoints.get(0) instanceof MessageFilter);
146
147 assertTrue(((MessageFilter) outEndpoints.get(0)).getFilter() instanceof JXPathFilter);
148 JXPathFilter filter = (JXPathFilter) ((MessageFilter) outEndpoints.get(0)).getFilter();
149 assertEquals("filter xml for content", filter.getExpectedValue());
150 assertEquals("/mule:mule/mule:flow[2]/@name", filter.getPattern());
151 assertNotNull(filter.getNamespaces());
152 Map<?, ?> namespaces = filter.getNamespaces();
153 assertEquals(2, namespaces.size());
154 assertEquals("http://www.springframework.org/schema/beans", namespaces.get("spring"));
155 assertTrue(namespaces.get("mule")
156 .toString()
157 .startsWith("http://www.mulesoft.org/schema/mule/core"));
158 }
159 else
160 {
161 fail("Unexpected Object");
162 }
163 }
164 }