19
19
20
20
import java .util .Comparator ;
21
21
import java .util .List ;
22
+ import java .util .Locale ;
22
23
import java .util .Map ;
23
24
import java .util .Optional ;
24
25
import java .util .Set ;
@@ -146,6 +147,7 @@ public void generateSharedComponents(GenerationContext context) {
146
147
HttpProtocolGeneratorUtils .generateMetadataDeserializer (context , getApplicationProtocol ().getResponseType ());
147
148
HttpProtocolGeneratorUtils .generateCollectBody (context );
148
149
HttpProtocolGeneratorUtils .generateCollectBodyString (context );
150
+ HttpProtocolGeneratorUtils .generateHttpBindingUtils (context );
149
151
}
150
152
151
153
/**
@@ -355,26 +357,26 @@ private void writeHeaders(
355
357
operation .getInput ().ifPresent (outputId -> {
356
358
Model model = context .getModel ();
357
359
for (HttpBinding binding : bindingIndex .getRequestBindings (operation , Location .HEADER )) {
358
- String memberName = symbolProvider .toMemberName (binding .getMember ());
359
- writer .openBlock ("if (input.$L !== undefined) {" , "}" , memberName , () -> {
360
+ String memberLocation = "input." + symbolProvider .toMemberName (binding .getMember ());
361
+ writer .openBlock ("if (isSerializableHeaderValue($1L)) {" , "}" , memberLocation , () -> {
360
362
Shape target = model .expectShape (binding .getMember ().getTarget ());
361
- String headerValue = getInputValue (context , binding .getLocation (), "input." + memberName ,
363
+ String headerValue = getInputValue (context , binding .getLocation (), memberLocation + "!" ,
362
364
binding .getMember (), target );
363
365
writer .write ("headers[$S] = $L;" , binding .getLocationName (), headerValue );
364
366
});
365
367
}
366
368
367
369
// Handle assembling prefix headers.
368
370
for (HttpBinding binding : bindingIndex .getRequestBindings (operation , Location .PREFIX_HEADERS )) {
369
- String memberName = symbolProvider .toMemberName (binding .getMember ());
370
- writer .openBlock ("if (input. $L !== undefined) {" , "}" , memberName , () -> {
371
+ String memberLocation = "input." + symbolProvider .toMemberName (binding .getMember ());
372
+ writer .openBlock ("if ($L !== undefined) {" , "}" , memberLocation , () -> {
371
373
MapShape prefixMap = model .expectShape (binding .getMember ().getTarget ()).asMapShape ().get ();
372
374
Shape target = model .expectShape (prefixMap .getValue ().getTarget ());
373
375
// Iterate through each entry in the member.
374
- writer .openBlock ("Object.keys(input. $L).forEach(suffix => {" , "});" , memberName , () -> {
376
+ writer .openBlock ("Object.keys($L).forEach(suffix => {" , "});" , memberLocation , () -> {
375
377
// Use a ! since we already validated the input member is defined above.
376
378
String headerValue = getInputValue (context , binding .getLocation (),
377
- "input." + memberName + "![suffix]" , binding .getMember (), target );
379
+ memberLocation + "![suffix]" , binding .getMember (), target );
378
380
// Append the suffix to the defined prefix and serialize the value in to that key.
379
381
writer .write ("headers[$S + suffix] = $L;" , binding .getLocationName (), headerValue );
380
382
});
@@ -951,7 +953,7 @@ private void readHeaders(
951
953
Model model = context .getModel ();
952
954
for (HttpBinding binding : bindingIndex .getResponseBindings (operationOrError , Location .HEADER )) {
953
955
String memberName = symbolProvider .toMemberName (binding .getMember ());
954
- String headerName = binding .getLocationName ().toLowerCase ();
956
+ String headerName = binding .getLocationName ().toLowerCase (Locale . US );
955
957
writer .openBlock ("if ($L.headers[$S] !== undefined) {" , "}" , outputName , headerName , () -> {
956
958
Shape target = model .expectShape (binding .getMember ().getTarget ());
957
959
String headerValue = getOutputValue (context , binding .getLocation (),
@@ -973,16 +975,17 @@ private void readHeaders(
973
975
writer .write ("contents.$L = {};" , memberName );
974
976
});
975
977
976
- // Generate a single block for each group of prefix headers.
977
- writer .openBlock ("if (header.startsWith($S)) {" , "}" , binding .getLocationName (), () -> {
978
+ // Generate a single block for each group of lower-cased prefix headers.
979
+ String headerLocation = binding .getLocationName ().toLowerCase (Locale .US );
980
+ writer .openBlock ("if (header.startsWith($S)) {" , "}" , headerLocation , () -> {
978
981
MapShape prefixMap = model .expectShape (binding .getMember ().getTarget ()).asMapShape ().get ();
979
982
Shape target = model .expectShape (prefixMap .getValue ().getTarget ());
980
983
String headerValue = getOutputValue (context , binding .getLocation (),
981
984
outputName + ".headers[header]" , binding .getMember (), target );
982
985
983
986
// Extract the non-prefix portion as the key.
984
987
writer .write ("contents.$L[header.substring($L)] = $L;" ,
985
- memberName , binding . getLocationName () .length (), headerValue );
988
+ memberName , headerLocation .length (), headerValue );
986
989
});
987
990
}
988
991
});
0 commit comments