⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 abstractxpathexpressionevaluator.java

📁 提供ESB 应用mule源代码 提供ESB 应用mule源代码
💻 JAVA
字号:
/* * $Id: AbstractXPathExpressionEvaluator.java 11249 2008-03-07 14:59:58Z tcarlson $ * -------------------------------------------------------------------------------------- * Copyright (c) MuleSource, Inc.  All rights reserved.  http://www.mulesource.com * * The software in this package is published under the terms of the CPAL v1.0 * license, a copy of which has been included with this distribution in the * LICENSE.txt file. */package org.mule.module.xml.expression;import org.mule.api.MuleMessage;import org.mule.api.MuleRuntimeException;import org.mule.api.lifecycle.Disposable;import org.mule.module.xml.i18n.XmlMessages;import org.mule.util.expression.ExpressionEvaluator;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.WeakHashMap;import org.jaxen.JaxenException;import org.jaxen.XPath;/** * Provides a base class for XPath property extractors. The XPath engine used is jaxen (http://jaxen.org) which supports * XPath queries on other object models such as JavaBeans as well as Xml */public abstract class AbstractXPathExpressionEvaluator implements ExpressionEvaluator, Disposable{    private Map cache = new WeakHashMap(8);    /** {@inheritDoc} */    public Object evaluate(String expression, Object message)    {        try        {            if(message instanceof MuleMessage)            {                message = ((MuleMessage)message).getPayload();            }            XPath xpath = getXPath(expression, message);            List result = xpath.selectNodes(message);            result = extractResultsFromNodes(result);            if(result.size()==1)            {                return result.get(0);            }            else if(result.size()==0)            {                return null;            }            else            {                return result;            }        }        catch (JaxenException e)        {            throw new MuleRuntimeException(XmlMessages.failedToProcessXPath(expression), e);        }    }    /** {@inheritDoc} */    public final void setName(String name)    {        throw new UnsupportedOperationException("setName");    }    protected XPath getXPath(String expression, Object object) throws JaxenException    {        XPath xpath = (XPath)cache.get(expression + getClass().getName());        if(xpath==null)        {            xpath = createXPath(expression, object);            cache.put(expression + getClass().getName(), xpath);        }        return xpath;    }    protected abstract XPath createXPath(String expression, Object object) throws JaxenException;    protected List extractResultsFromNodes(List results)    {        if(results==null)        {            return null;        }        List newResults = new ArrayList(results.size());        for (Iterator iterator = results.iterator(); iterator.hasNext();)        {            Object o = iterator.next();            newResults.add(extractResultFromNode(o));        }        return newResults;    }    /**     * A lifecycle method where implementor should free up any resources. If an     * exception is thrown it should just be logged and processing should continue.     * This method should not throw Runtime exceptions.     */    public void dispose()    {        cache.clear();    }    protected abstract Object extractResultFromNode(Object result);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -