View Javadoc

1   /*
2    * $Id: XPathFilterTestCase.java 19191 2010-08-25 21:05:23Z tcarlson $
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.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   * @author Ryan Heaton
27   */
28  public class XPathFilterTestCase extends AbstractMuleTestCase
29  {
30  
31      /**
32       * tests accepting the mule message.
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       * tests accepting a node.
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       * tests accepting a node.
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 }