1
2
3
4
5
6
7
8
9
10
11 package org.mule.module.xml.filters;
12
13 import org.mule.DefaultMuleMessage;
14 import org.mule.tck.AbstractMuleTestCase;
15
16 import java.io.InputStream;
17 import java.util.HashMap;
18
19 import javax.xml.parsers.DocumentBuilderFactory;
20 import javax.xml.xpath.XPathFactory;
21
22 import org.w3c.dom.Document;
23 import org.w3c.dom.Node;
24
25
26
27
28 public class XPathFilterTestCase extends AbstractMuleTestCase
29 {
30
31
32
33
34 public void testAcceptMessage() throws Exception
35 {
36 final Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
37 DefaultMuleMessage message = new DefaultMuleMessage(null, muleContext);
38 XPathFilter filter = new XPathFilter()
39 {
40 @Override
41 public Node toDOMNode(Object src) throws Exception
42 {
43 return document;
44 }
45
46 @Override
47 protected boolean accept(Node node)
48 {
49 return node == document;
50 }
51 };
52
53 assertFalse("shouldn't accept a message if no payload is set.", filter.accept(message));
54 message.setPayload(new Object());
55 filter.setPattern("/some/pattern = null");
56 assertTrue(filter.accept(message));
57 assertEquals("null", filter.getExpectedValue());
58 assertEquals("/some/pattern", filter.getPattern().trim());
59 assertSame(document, message.getPayload());
60 message.setPayload(new Object());
61 filter.setExpectedValue(null);
62 assertTrue(filter.accept(message));
63 assertEquals("true", filter.getExpectedValue());
64 assertEquals("/some/pattern", filter.getPattern().trim());
65 assertSame(document, message.getPayload());
66 }
67
68
69
70
71 public void testAcceptNode() throws Exception
72 {
73 InputStream testXml = getClass().getResourceAsStream("/test.xml");
74 assertNotNull(testXml);
75 XPathFilter filter = new XPathFilter();
76
77 filter.setXpath(XPathFactory.newInstance().newXPath());
78
79 filter.setPattern("/some/unknown/path");
80 filter.setExpectedValue("bogus");
81 filter.initialise();
82 DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
83 builderFactory.setNamespaceAware(true);
84 Document document = builderFactory.newDocumentBuilder().parse(testXml);
85 assertFalse("shouldn't have accepted a null evaluation when expected value isn't null.",
86 filter.accept(document));
87 filter.setExpectedValue("null");
88 assertTrue(filter.accept(document));
89 filter.setPattern("test/some/in");
90 assertFalse(filter.accept(document));
91 filter.setExpectedValue("another");
92 assertTrue(filter.accept(document));
93 }
94
95
96
97
98 public void testAcceptSoapNode() throws Exception
99 {
100 InputStream soapEnvelope = getClass().getResourceAsStream("/request.xml");
101 assertNotNull(soapEnvelope);
102 XPathFilter filter = new XPathFilter();
103
104 filter.setXpath(XPathFactory.newInstance().newXPath());
105
106 filter.setPattern("/soap:Envelope/soap:Body/mule:echo/mule:echo");
107 filter.setExpectedValue("Hello!");
108 HashMap<String, String> prefix2Namespace = new HashMap<String, String>();
109 prefix2Namespace.put("soap", "http://schemas.xmlsoap.org/soap/envelope/");
110 prefix2Namespace.put("mule", "http://simple.component.mule.org/");
111 filter.setNamespaces(prefix2Namespace);
112 filter.initialise();
113 DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
114 builderFactory.setNamespaceAware(true);
115 Document envDoc = builderFactory.newDocumentBuilder().parse(soapEnvelope);
116 assertTrue(filter.accept(envDoc));
117 }
118
119 }