private List<ValidationEvent> validateHeaderConflicts(OperationShape operation, StructureShape containerShape) {
        List<ValidationEvent> events = new ArrayList<>();

        for (MemberShape member : containerShape.members()) {
            // Emit a DANGER event if the prefix used with the HttpChecksum trait conflicts with any member
            // with HttpPrefixHeaders trait within the container shape. This is a DANGER event as members modeled
            // with HttpPrefixHeaders may unintentionally conflict with the checksum header resolved using the
            // HttpChecksum trait.
            member.getTrait(HttpPrefixHeadersTrait.class)
                    .map(HttpPrefixHeadersTrait::getValue)
                    .ifPresent(headerPrefix -> {
                        if (HttpChecksumTrait.CHECKSUM_PREFIX.startsWith(headerPrefix)) {
                            String memberName = member.getId().getName();
                            String prefixString = headerPrefix.toLowerCase(Locale.US);
                            events.add(danger(operation,
                                    format("The `httpPrefixHeaders` binding of `%s` uses"
                                            + " the prefix `%s` that conflicts with the prefix `%s` used by the"
                                            + " `httpChecksum` trait.",
                                            memberName,
                                            prefixString,
                                            HttpChecksumTrait.CHECKSUM_PREFIX),
                                    "HttpPrefixHeaders",
                                    memberName,
                                    prefixString));
                        }
                    });

            // Service may model members that are bound to the http header for checksum on input or output shape.
            // This enables customers to provide checksum as input, or access returned checksum value in output.
            // We trigger a WARNING event to prevent any unintentional behavior.
            member.getTrait(HttpHeaderTrait.class)
                    .map(HttpHeaderTrait::getValue)
                    .ifPresent(headerName -> {
                        if (headerName.startsWith(HttpChecksumTrait.CHECKSUM_PREFIX)) {
                            String memberName = member.getId().getName();
                            String headerString = headerName.toLowerCase(Locale.US);
                            events.add(warning(operation,
                                    format("The `httpHeader` binding of `%s` on `%s`"
                                            + " starts with the prefix `%s` used by the `httpChecksum` trait.",
                                            headerString,
                                            memberName,
                                            HttpChecksumTrait.CHECKSUM_PREFIX),
                                    "HttpHeader",
                                    memberName,
                                    headerString));
                        }
                    });
        }
        return events;
    }
Validates the HttpChecksum trait.

<ul>
    <li>Validates that at least one of the request or response checksum
    behavior is configured.</li>
    <li>Validates that the {@code requestAlgorithmMember} and
    {@code requestChecksumModeMember} properties point to valid input members.</li>
    <li>Validates that the {@code requestAlgorithmMember} targeted member contains
    only supported algorithms.</li>
    <li>Validates that the {@code requestChecksumModeMember} targeted member contains
    only supported modes.</li>
    <li>Checks for conflicts with {@code @httpHeader} and {@code @httpPrefixHeaders}.</li>
</ul>
smithy-aws-traits/src/main/java/software/amazon/smithy/aws/traits/HttpChecksumTraitValidator.java