Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

Source code: org/activemq/filter/JAXPXPathEvaluator.java


1   package org.activemq.filter;
2   
3   import java.io.ByteArrayInputStream;
4   import java.io.StringReader;
5   
6   import javax.jms.BytesMessage;
7   import javax.jms.JMSException;
8   import javax.jms.Message;
9   import javax.jms.TextMessage;
10  import javax.xml.xpath.XPath;
11  import javax.xml.xpath.XPathConstants;
12  import javax.xml.xpath.XPathExpressionException;
13  import javax.xml.xpath.XPathFactory;
14  
15  import org.xml.sax.InputSource;
16  
17  public class JAXPXPathEvaluator implements XPathExpression.XPathEvaluator {
18      
19      private static final XPathFactory factory = XPathFactory.newInstance();
20      private javax.xml.xpath.XPathExpression expression;
21      
22      public JAXPXPathEvaluator(String xpathExpression) {
23          try {
24              XPath xpath = factory.newXPath();
25              expression = xpath.compile(xpathExpression);            
26          } catch (XPathExpressionException e) {
27              throw new RuntimeException("Invalid XPath expression: "+xpathExpression);
28          }
29      }
30      
31      public boolean evaluate(Message message) throws JMSException {
32          if( message instanceof TextMessage ) {
33              String text = ((TextMessage)message).getText();
34              return evaluate(text);                
35          } else if ( message instanceof BytesMessage ) {
36              BytesMessage bm = (BytesMessage) message;
37              byte data[] = new byte[(int) bm.getBodyLength()];
38              bm.readBytes(data);
39              return evaluate(data);
40          }            
41          return false;
42      }
43  
44      private boolean evaluate(byte[] data) {
45          try {
46              InputSource inputSource = new InputSource(new ByteArrayInputStream(data));
47              return ((Boolean)expression.evaluate(inputSource, XPathConstants.BOOLEAN)).booleanValue();
48          } catch (XPathExpressionException e) {
49              return false;
50          }
51      }
52  
53      private boolean evaluate(String text) {
54          try {
55              InputSource inputSource = new InputSource(new StringReader(text));
56              return ((Boolean)expression.evaluate(inputSource, XPathConstants.BOOLEAN)).booleanValue();
57          } catch (XPathExpressionException e) {
58              return false;
59          }
60      }
61  }