| Home >> All >> org >> activemq >> [ filter Javadoc ] |
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 }