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    }