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