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 }