You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Adrian Nistor (Bug 55161):
The problem appears in version 2.9 and in revision 1498029. I
attached a two-line patch (patch.diff) that fixes it.
In method "SoapSampler.setPostHeaders", the loop over the
"HeaderManager mngr" keeps overriding "length" with
"Integer.parseInt(hd.getValue())". Therefore, only the last written
value is visible out of the loop and all the other writes and
iterations are not necessary. The patch iterates from the end of
"HeaderManager mngr" and breaks the first time when "length" is set.
The above fix (in patch.diff) is certainly correct (it's easy to see
through code inspection), but I think we can have an even shorter
patch (one line, in patchShort.diff): just break as soon as "length"
is set, without reversion the loop order. patchShort.diff is correct
only if there can be only one "hd.getName()" equal to
"HTTPConstants.HEADER_CONTENT_LENGTH" (which I think it's the case),
or if it doesn't matter which attribute value "length" gets, as long
as the condition
HTTPConstants.HEADER_CONTENT_LENGTH.equalsIgnoreCase(hd.getName()) is
satisfied.
Index: src/protocol/http/org/apache/jmeter/protocol/http/sampler/SoapSampler.java
===================================================================--- src/protocol/http/org/apache/jmeter/protocol/http/sampler/SoapSampler.java (revision 1498029)+++ src/protocol/http/org/apache/jmeter/protocol/http/sampler/SoapSampler.java (working copy)@@ -137,10 +137,11 @@
// to use it.
HeaderManager mngr = getHeaderManager();
int headerSize = mngr.size();
- for (int idx = 0; idx < headerSize; idx++) {+ for (int idx = headerSize - 1; idx >= 0; idx--) {
Header hd = mngr.getHeader(idx);
if (HTTPConstants.HEADER_CONTENT_LENGTH.equalsIgnoreCase(hd.getName())) {// Use this to override file length
length = Integer.parseInt(hd.getValue());
+ break;
}
// All the other headers are set up by HTTPSampler2.setupConnection()
}
Severity: normal
OS: All
The text was updated successfully, but these errors were encountered:
Index: src/protocol/http/org/apache/jmeter/protocol/http/sampler/SoapSampler.java
===================================================================--- src/protocol/http/org/apache/jmeter/protocol/http/sampler/SoapSampler.java (revision 1498029)+++ src/protocol/http/org/apache/jmeter/protocol/http/sampler/SoapSampler.java (working copy)@@ -141,6 +141,7 @@
Header hd = mngr.getHeader(idx);
if (HTTPConstants.HEADER_CONTENT_LENGTH.equalsIgnoreCase(hd.getName())) {// Use this to override file length
length = Integer.parseInt(hd.getValue());
+ break;
}
// All the other headers are set up by HTTPSampler2.setupConnection()
}
Adrian Nistor (Bug 55161):
The problem appears in version 2.9 and in revision 1498029. I
attached a two-line patch (patch.diff) that fixes it.
In method "SoapSampler.setPostHeaders", the loop over the
"HeaderManager mngr" keeps overriding "length" with
"Integer.parseInt(hd.getValue())". Therefore, only the last written
value is visible out of the loop and all the other writes and
iterations are not necessary. The patch iterates from the end of
"HeaderManager mngr" and breaks the first time when "length" is set.
The above fix (in patch.diff) is certainly correct (it's easy to see
through code inspection), but I think we can have an even shorter
patch (one line, in patchShort.diff): just break as soon as "length"
is set, without reversion the loop order. patchShort.diff is correct
only if there can be only one "hd.getName()" equal to
"HTTPConstants.HEADER_CONTENT_LENGTH" (which I think it's the case),
or if it doesn't matter which attribute value "length" gets, as long
as the condition
HTTPConstants.HEADER_CONTENT_LENGTH.equalsIgnoreCase(hd.getName()) is
satisfied.
Created attachment patch.diff: patch
patch.diff
Severity: normal
OS: All
The text was updated successfully, but these errors were encountered: