001 /******************************************************************************
002 * Copyright (C) MActor Developers. All rights reserved. *
003 * ---------------------------------------------------------------------------*
004 * This file is part of MActor. *
005 * *
006 * MActor is free software; you can redistribute it and/or modify *
007 * it under the terms of the GNU General Public License as published by *
008 * the Free Software Foundation; either version 2 of the License, or *
009 * (at your option) any later version. *
010 * *
011 * MActor is distributed in the hope that it will be useful, *
012 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
014 * GNU General Public License for more details. *
015 * *
016 * You should have received a copy of the GNU General Public License *
017 * along with MActor; if not, write to the Free Software *
018 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *
019 ******************************************************************************/
020 package org.mactor.extensions.xml;
021
022 import java.util.List;
023
024 import org.dom4j.Document;
025 import org.dom4j.InvalidXPathException;
026 import org.dom4j.Node;
027 import org.mactor.brokers.Message;
028 import org.mactor.framework.ConfigException;
029 import org.mactor.framework.MactorException;
030 import org.mactor.framework.TestContext;
031 import org.mactor.framework.extensioninterface.ValueCommand;
032
033 /**
034 * Extracts a selected field from the last received message <br/> The field to
035 * select is specified as a single parameter containing the XPath expression
036 * that selects the single attribute or element <br/> Namespace information in
037 * the evaluated messages is ignored, so the XPath expressions must not include
038 * namespace prefixes
039 *
040 * @author Lars Ivar Almli
041 */
042 public class XPathIgnoreNsValueExtractor implements ValueCommand {
043 public String extractValue(TestContext context, List<String> params) throws MactorException {
044 try {
045 Message m = context.getLastIncomingMessage();
046 if (m == null)
047 throw new MactorException("There is no incoming message to validate!");
048 Document doc = m.getContentDocumentNoNs();
049 if (params.size() == 0)
050 return null;
051 Node n = doc.selectSingleNode(params.get(0));
052 return n == null ? null : n.getText();
053 } catch (InvalidXPathException ie) {
054 throw new ConfigException("Invalid xpath expression '" + params.get(0) + "'. Error: " + ie.getMessage(), ie);
055 }
056 }
057 }