All Downloads are FREE. Search and download functionalities are using the official Maven repository.

software.amazon.awssdk.protocols.xml.internal.unmarshall.HeaderUnmarshaller Maven / Gradle / Ivy

There is a newer version: 2.28.4
Show newest version
/*
 * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License").
 * You may not use this file except in compliance with the License.
 * A copy of the License is located at
 *
 *  http://aws.amazon.com/apache2.0
 *
 * or in the "license" file accompanying this file. This file is distributed
 * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
 * express or implied. See the License for the specific language governing
 * permissions and limitations under the License.
 */

package software.amazon.awssdk.protocols.xml.internal.unmarshall;

import static java.util.stream.Collectors.toList;
import static software.amazon.awssdk.utils.StringUtils.replacePrefixIgnoreCase;
import static software.amazon.awssdk.utils.StringUtils.startsWithIgnoreCase;

import java.time.Instant;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import software.amazon.awssdk.annotations.SdkInternalApi;
import software.amazon.awssdk.core.SdkField;
import software.amazon.awssdk.protocols.core.StringToValueConverter;
import software.amazon.awssdk.protocols.query.unmarshall.XmlElement;
import software.amazon.awssdk.utils.http.SdkHttpUtils;

@SdkInternalApi
public final class HeaderUnmarshaller {
    public static final XmlUnmarshaller STRING = new SimpleHeaderUnmarshaller<>(StringToValueConverter.TO_STRING);
    public static final XmlUnmarshaller INTEGER = new SimpleHeaderUnmarshaller<>(StringToValueConverter.TO_INTEGER);
    public static final XmlUnmarshaller LONG = new SimpleHeaderUnmarshaller<>(StringToValueConverter.TO_LONG);
    public static final XmlUnmarshaller SHORT = new SimpleHeaderUnmarshaller<>(StringToValueConverter.TO_SHORT);
    public static final XmlUnmarshaller FLOAT = new SimpleHeaderUnmarshaller<>(StringToValueConverter.TO_FLOAT);
    public static final XmlUnmarshaller DOUBLE = new SimpleHeaderUnmarshaller<>(StringToValueConverter.TO_DOUBLE);
    public static final XmlUnmarshaller BOOLEAN = new SimpleHeaderUnmarshaller<>(StringToValueConverter.TO_BOOLEAN);
    public static final XmlUnmarshaller INSTANT =
        new SimpleHeaderUnmarshaller<>(XmlProtocolUnmarshaller.INSTANT_STRING_TO_VALUE);

    // Only supports string value type
    public static final XmlUnmarshaller> MAP = ((context, content, field) -> {
        Map result = new HashMap<>();
        context.response().headers().entrySet().stream()
               .filter(e -> startsWithIgnoreCase(e.getKey(), field.locationName()))
               .forEach(e -> result.put(replacePrefixIgnoreCase(e.getKey(), field.locationName(), ""),
                                        String.join(",", e.getValue())));
        return result;
    });

    // Only supports string value type
    public static final XmlUnmarshaller> LIST = (context, content, field) -> {
        return SdkHttpUtils.allMatchingHeaders(context.response().headers(), field.locationName()).collect(toList());
    };

    private HeaderUnmarshaller() {
    }

    private static class SimpleHeaderUnmarshaller implements XmlUnmarshaller {

        private final StringToValueConverter.StringToValue stringToValue;

        private SimpleHeaderUnmarshaller(StringToValueConverter.StringToValue stringToValue) {
            this.stringToValue = stringToValue;
        }

        @Override
        public T unmarshall(XmlUnmarshallerContext context, List content, SdkField field) {
            return context.response().firstMatchingHeader(field.locationName())
                          .map(s -> stringToValue.convert(s, field))
                          .orElse(null);
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy