public Object Get(EventBean eventBean) { var und = eventBean.Underlying; if (und == null) { throw new PropertyAccessException( "Unexpected null underlying event encountered, expecting System.Xml.XmlNode instance as underlying"); } XPathNavigator navigator; var xnode = und as XElement; if (xnode == null) { var node = und as XmlNode; if (node == null) { throw new PropertyAccessException("Unexpected underlying event of type '" + und.GetType().FullName + "' encountered, expecting System.Xml.XmlNode as underlying"); } if (Log.IsDebugEnabled) { Log.Debug( "Running XPath '{0}' for property '{1}' against Node XML : {2}", _expressionText, _property, SchemaUtil.Serialize((XmlNode)und)); } navigator = node.CreateNavigator(); } else { navigator = xnode.CreateNavigator(); } return(EvaluateXPathGet( navigator, _expression, _expressionText, _property, _optionalCastToType, _resultType, _isCastToArray, _simpleTypeParser)); }
public Object Get(EventBean eventBean) { var und = eventBean.Underlying; if (und == null) { throw new PropertyAccessException("Unexpected null underlying event encountered, expecting System.Xml.XmlNode instance as underlying"); } XPathNavigator navigator; var xnode = und as XElement; if (xnode == null) { var node = und as XmlNode; if (node == null) { throw new PropertyAccessException("Unexpected underlying event of type '" + und.GetType().FullName + "' encountered, expecting System.Xml.XmlNode as underlying"); } if (Log.IsDebugEnabled) { Log.Debug( "Running XPath '{0}' for property '{1}' against Node XML : {2}", _expressionText, _property, SchemaUtil.Serialize((XmlNode)und)); } navigator = node.CreateNavigator(); } else { navigator = xnode.CreateNavigator(); } try { var result = navigator.Evaluate(_expression); if (result == null) { return(null); } // if there is no parser, return xpath expression type if (_optionalCastToType == null) { var nodeIterator = result as XPathNodeIterator; if (nodeIterator != null) { if (nodeIterator.Count == 0) { return(null); } if (nodeIterator.Count == 1) { nodeIterator.MoveNext(); switch (_resultType) { case XPathResultType.Any: return(((System.Xml.IHasXmlNode)nodeIterator.Current).GetNode()); case XPathResultType.String: return(nodeIterator.Current.TypedValue); case XPathResultType.Boolean: return(nodeIterator.Current.ValueAsBoolean); case XPathResultType.Number: return(nodeIterator.Current.ValueAsDouble); default: return(nodeIterator.Current.TypedValue); } } else { return(new XPathIteratorNodeList(nodeIterator)); } } return(result); } if (_isCastToArray) { return(CastToArray(result)); } if (result is XPathNodeIterator) { var nodeIterator = result as XPathNodeIterator; if (nodeIterator.Count == 0) { return(null); } if (nodeIterator.Count == 1) { nodeIterator.MoveNext(); result = nodeIterator.Current.TypedValue; } else { if (_simpleTypeParser == null) { var resultList = new List <object>(); while (nodeIterator.MoveNext()) { result = nodeIterator.Current.TypedValue; resultList.Add(result); } return(resultList.ToArray()); } else { throw new NotImplementedException(); } } } // string results get parsed if (result is String) { try { return(_simpleTypeParser.Invoke((string)result)); } catch { Log.Warn("Error parsing XPath property named '" + _property + "' expression result '" + result + " as type " + _optionalCastToType.Name); return(null); } } // coercion if (result is Double) { try { return(CoercerFactory.CoerceBoxed(result, _optionalCastToType)); } catch { Log.Warn("Error coercing XPath property named '" + _property + "' expression result '" + result + " as type " + _optionalCastToType.Name); return(null); } } // check bool type if (result is Boolean) { if (_optionalCastToType != typeof(bool?)) { Log.Warn("Error coercing XPath property named '" + _property + "' expression result '" + result + " as type " + _optionalCastToType.Name); return(null); } return(result); } Log.Warn("Error processing XPath property named '" + _property + "' expression result '" + result + ", not a known type"); return(null); } catch (XPathException e) { throw new PropertyAccessException("Error getting property " + _property, e); } }
public Object GetFragment(EventBean eventBean) { if (_fragmentFactory == null) { return(null); } Object und = eventBean.Underlying; if (und == null) { throw new PropertyAccessException("Unexpected null underlying event encountered, expecting System.Xml.XmlNode instance as underlying"); } var node = und as XmlNode; if (node == null) { throw new PropertyAccessException("Unexpected underlying event of type '" + und.GetType().FullName + "' encountered, expecting System.Xml.XmlNode as underlying"); } try { if (Log.IsDebugEnabled) { Log.Debug( "Running XPath '{0}' for property '{1}' against Node XML : {2}", _expressionText, _property, SchemaUtil.Serialize((XmlNode)und)); } var navigator = node.CreateNavigator(); var result = navigator.Evaluate(_expression); if (result == null) { return(null); } if (result is XPathNodeIterator) { var nodeIterator = result as XPathNodeIterator; if (nodeIterator.Count == 0) { return(null); } if (nodeIterator.Count == 1) { nodeIterator.MoveNext(); return(_fragmentFactory.GetEvent(((IHasXmlNode)nodeIterator.Current).GetNode())); } var events = new List <EventBean>(); while (nodeIterator.MoveNext()) { events.Add(_fragmentFactory.GetEvent(((IHasXmlNode)nodeIterator.Current).GetNode())); } return(events.ToArray()); } Log.Warn("Error processing XPath property named '" + _property + "' expression result is not of type Node or Nodeset"); return(null); } catch (XPathException e) { throw new PropertyAccessException("Error getting property " + _property, e); } }