001 package org.activemq.filter;
002
003 import java.io.ByteArrayInputStream;
004
005 import javax.jms.BytesMessage;
006 import javax.jms.JMSException;
007 import javax.jms.Message;
008 import javax.jms.TextMessage;
009
010 import org.apache.xmlbeans.XmlObject;
011
012 public class XMLBeansXPathEvaluator implements XPathExpression.XPathEvaluator {
013
014 private final String xpath;
015
016 public XMLBeansXPathEvaluator(String xpath) {
017 this.xpath = xpath;
018 }
019
020 public boolean evaluate(Message message) throws JMSException {
021 if( message instanceof TextMessage ) {
022 String text = ((TextMessage)message).getText();
023 try {
024 XmlObject object = XmlObject.Factory.parse(text);
025 XmlObject[] objects = object.selectPath(xpath);
026 return object!=null && objects.length>0;
027 } catch (Throwable e) {
028 return false;
029 }
030
031 } else if ( message instanceof BytesMessage ) {
032 BytesMessage bm = (BytesMessage) message;
033 byte data[] = new byte[(int) bm.getBodyLength()];
034 bm.readBytes(data);
035 try {
036 XmlObject object = XmlObject.Factory.parse(new ByteArrayInputStream(data));
037 XmlObject[] objects = object.selectPath(xpath);
038 return object!=null && objects.length>0;
039 } catch (Throwable e) {
040 return false;
041 }
042 }
043 return false;
044 }
045 }