@@ -979,6 +979,12 @@ private void writeRequestHeaders(
979
979
// Only set the content type if one can be determined.
980
980
writeContentTypeHeader (context , operation , true );
981
981
writeDefaultInputHeaders (context , operation );
982
+ if (inputPresent ) {
983
+ // Handle assembling prefix headers.
984
+ for (HttpBinding binding : prefixHeaders ) {
985
+ writePrefixHeaders (context , binding );
986
+ }
987
+ }
982
988
983
989
if (inputPresent ) {
984
990
for (HttpBinding binding : headers ) {
@@ -987,13 +993,6 @@ private void writeRequestHeaders(
987
993
}
988
994
989
995
flushHeadersBuffer (writer );
990
-
991
- if (inputPresent ) {
992
- // Handle assembling prefix headers.
993
- for (HttpBinding binding : prefixHeaders ) {
994
- writePrefixHeaders (context , binding );
995
- }
996
- }
997
996
writer .dedent ();
998
997
writer .write (closing );
999
998
}
@@ -1080,9 +1079,13 @@ private void writePrefixHeaders(GenerationContext context, HttpBinding binding)
1080
1079
// Use a ! since we already validated the input member is defined above.
1081
1080
String headerValue = getInputValue (context , binding .getLocation (),
1082
1081
memberLocation + "![suffix]" , binding .getMember (), target );
1083
- // Append the prefix to key.
1084
- writer .write ("acc[`$L$${suffix.toLowerCase()}`] = $L;" ,
1085
- binding .getLocationName ().toLowerCase (Locale .US ), headerValue );
1082
+ String headerKey = binding .getLocationName ().toLowerCase (Locale .US ) + "${suffix.toLowerCase()}" ;
1083
+ writer .write ("const headerKey = `$L`;" , headerKey );
1084
+ writer .write ("if (!Object.keys(headers).some(key => {" );
1085
+ writer .write (" return key.toLowerCase() === headerKey.toLowerCase();" );
1086
+ writer .write ("})) {" );
1087
+ writer .write (" acc[headerKey] = $L;" , headerValue );
1088
+ writer .write ("}" );
1086
1089
writer .write ("return acc;" );
1087
1090
});
1088
1091
}
@@ -1103,16 +1106,16 @@ private void writeResponseHeaders(
1103
1106
writeContentTypeHeader (context , operationOrError , false );
1104
1107
injectExtraHeaders .run ();
1105
1108
1109
+ // Handle assembling prefix headers.
1110
+ for (HttpBinding binding : bindingIndex .getResponseBindings (operationOrError , Location .PREFIX_HEADERS )) {
1111
+ writePrefixHeaders (context , binding );
1112
+ }
1113
+
1106
1114
for (HttpBinding binding : bindingIndex .getResponseBindings (operationOrError , Location .HEADER )) {
1107
1115
writeNormalHeader (context , binding );
1108
1116
}
1109
1117
1110
1118
flushHeadersBuffer (writer );
1111
-
1112
- // Handle assembling prefix headers.
1113
- for (HttpBinding binding : bindingIndex .getResponseBindings (operationOrError , Location .PREFIX_HEADERS )) {
1114
- writePrefixHeaders (context , binding );
1115
- }
1116
1119
});
1117
1120
}
1118
1121
0 commit comments