1 17 package org.apache.servicemix.expression; 18 19 import org.apache.servicemix.jbi.jaxp.SourceTransformer; 20 import org.apache.xmlbeans.XmlException; 21 import org.apache.xmlbeans.XmlObject; 22 import org.apache.xmlbeans.XmlOptions; 23 import org.apache.xmlbeans.XmlSaxHandler; 24 25 import javax.jbi.messaging.MessageExchange; 26 import javax.jbi.messaging.MessagingException; 27 import javax.jbi.messaging.NormalizedMessage; 28 import javax.xml.transform.TransformerException ; 29 import javax.xml.transform.sax.SAXResult ; 30 31 36 public class XMLBeansXPathExpression implements Expression { 37 private String xpath; 38 private XmlOptions options = new XmlOptions(); 39 private SourceTransformer transformer = new SourceTransformer(); 40 41 public XMLBeansXPathExpression(String xpath) { 42 this.xpath = xpath; 43 } 44 45 public Object evaluate(MessageExchange exchange, NormalizedMessage message) throws MessagingException { 46 try { 47 XmlSaxHandler handler = XmlObject.Factory.newXmlSaxHandler(); 48 SAXResult result = new SAXResult (handler.getContentHandler()); 49 transformer.toResult(message.getContent(), result); 50 XmlObject object = handler.getObject(); 51 return evaluateXPath(object, xpath, options); 52 } 53 catch (TransformerException e) { 54 throw new MessagingException(e); 55 } 56 catch (XmlException e) { 57 throw new MessagingException(e); 58 } 59 } 60 61 protected Object evaluateXPath(XmlObject object, String xpath, XmlOptions options) { 62 XmlObject[] xmlObjects = object.selectPath(this.xpath, this.options); 63 if (xmlObjects.length == 1) { 64 return xmlObjects[0]; 65 } 66 return xmlObjects; 67 } 68 } 69 | Popular Tags |