You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jmeter-dev@jakarta.apache.org by se...@apache.org on 2008/10/02 21:49:11 UTC

svn commit: r701225 - in /jakarta/jmeter/trunk: src/protocol/http/org/apache/jmeter/protocol/http/control/HeaderManager.java src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPSamplerBase.java xdocs/changes.xml

Author: sebb
Date: Thu Oct  2 12:49:11 2008
New Revision: 701225

URL: http://svn.apache.org/viewvc?rev=701225&view=rev
Log:
Bug 45479 - Support for multiple HTTP Header Manager nodes

Modified:
    jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/control/HeaderManager.java
    jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPSamplerBase.java
    jakarta/jmeter/trunk/xdocs/changes.xml

Modified: jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/control/HeaderManager.java
URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/control/HeaderManager.java?rev=701225&r1=701224&r2=701225&view=diff
==============================================================================
--- jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/control/HeaderManager.java (original)
+++ jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/control/HeaderManager.java Thu Oct  2 12:49:11 2008
@@ -31,6 +31,7 @@
 
 import org.apache.commons.io.IOUtils;
 import org.apache.jmeter.config.ConfigTestElement;
+import org.apache.jmeter.testelement.TestElement;
 import org.apache.jmeter.testelement.property.CollectionProperty;
 import org.apache.jmeter.util.JMeterUtils;
 import org.apache.jorphan.util.JOrphanUtils;
@@ -255,4 +256,55 @@
     public void setSOAPHeader(Object header) {
         this.SOAPHeader = header;
     }
+
+	/**
+	 * Merge the attributes with a another HeaderManager's attributes.
+	 * @param element The object to be merged with
+	 * @param preferLocalValues When both objects have a value for the 
+	 *        same attribute, this flag determines which value is preferresd. 
+	 */
+	public HeaderManager merge(TestElement element, boolean preferLocalValues) {
+		if (!(element instanceof HeaderManager)) {
+			throw new IllegalArgumentException("Cannot merge type:" + this.getClass().getName() + " with type:" + element.getClass().getName());
+		}
+		
+		// start off with a merged object as a copy of the local object
+		HeaderManager merged = (HeaderManager)this.clone();
+		
+		HeaderManager other = (HeaderManager)element;
+		// iterate thru each of the other headers
+		for (int i = 0; i < other.getHeaders().size(); i++) {
+			Header otherHeader = other.get(i);
+			boolean found = false;
+			// find the same property in the local headers
+			for (int j = 0; j < merged.getHeaders().size(); j++) {
+				Header mergedHeader = merged.get(j);
+				if (mergedHeader.getName().equalsIgnoreCase(otherHeader.getName())) {
+					// we have a match
+					found = true;
+					if (!preferLocalValues) {
+						// prefer values from the other object
+						if ( (otherHeader.getValue() == null) || (otherHeader.getValue().length() == 0) ) {
+							// the other object has an empty value, so remove this value from the merged object
+							merged.remove(j);
+						} else {
+							// use the other object's value
+							mergedHeader.setValue(otherHeader.getValue());
+						}
+					}
+					// break out of the inner loop
+					break;
+				}
+			}
+			if (!found) {
+				// the other object has a new value to be added to the merged
+				merged.add(otherHeader);
+			}
+		}
+		
+		// finally, merge the names so it's clear they've been merged
+		merged.setName(merged.getName() + ":" + other.getName());
+		
+		return merged;
+	}
 }

Modified: jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPSamplerBase.java
URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPSamplerBase.java?rev=701225&r1=701224&r2=701225&view=diff
==============================================================================
--- jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPSamplerBase.java (original)
+++ jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPSamplerBase.java Thu Oct  2 12:49:11 2008
@@ -715,7 +715,14 @@
     public void setHeaderManager(HeaderManager value) {
         HeaderManager mgr = getHeaderManager();
         if (mgr != null) {
-            log.warn("Existing HeaderManager " + mgr.getName() + " superseded by " + value.getName());
+            log.warn("Existing HeaderManager '" + mgr.getName() + "' merged with '" + value.getName() + "'");
+            value = mgr.merge(value, true);
+            if (log.isDebugEnabled()) {
+            	log.debug("HeaderManager merged: " + value.getName());
+            	for (int i=0; i < value.getHeaders().size(); i++) {
+            		log.debug("    " + value.getHeader(i).getName() + "=" + value.getHeader(i).getValue());
+            	}
+            }
         }
         setProperty(new TestElementProperty(HEADER_MANAGER, value));
     }

Modified: jakarta/jmeter/trunk/xdocs/changes.xml
URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/xdocs/changes.xml?rev=701225&r1=701224&r2=701225&view=diff
==============================================================================
--- jakarta/jmeter/trunk/xdocs/changes.xml (original)
+++ jakarta/jmeter/trunk/xdocs/changes.xml Thu Oct  2 12:49:11 2008
@@ -129,6 +129,7 @@
 <li>Random Variable - new configuration element to create random numeric variables</li>
 <li>Bug 45929 - improved French translations</li>
 <li>Bug 45571 - JMS Sampler correlation enhancement</li>
+<li>Bug 45479 - Support for multiple HTTP Header Manager nodes</li>
 </ul>
 
 <h3>Non-functional changes</h3>



---------------------------------------------------------------------
To unsubscribe, e-mail: jmeter-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: jmeter-dev-help@jakarta.apache.org