/** * Copyright 2015 Confluent Inc. * <p/> * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * <p/> * http://www.apache.org/licenses/LICENSE-2.0 * <p/> * Unless required by applicable law or agreed to in writing, software * distributed under the License 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 io.confluent.kafka.serializers; import kafka.serializer.Decoder; import kafka.utils.VerifiableProperties; /** * Decode JSON data to an Object. */ public class KafkaJsonDecoder<T> extends KafkaJsonDeserializer<T> implements Decoder<T> { /** * This constructor is needed by Kafka. When used directly or through reflection, * the type will default to {@link Object} since there is no way to infer a generic type. * In particular, it is an error to do the following: * * <pre>{@code * // WARNING: DON'T DO THIS * KafkaJsonDecoder<String> decoder = new KafkaJsonDecoder<String>(props); * } * </pre> * * <p>Instead you must use {@link KafkaJsonDecoder#KafkaJsonDecoder(VerifiableProperties, Class)} * with the expected type. * * @param props The decoder configuration */ @SuppressWarnings({"rawtypes", "unchecked"}) public KafkaJsonDecoder(VerifiableProperties props) { configure(new KafkaJsonDecoderConfig(props.props()), (Class<T>) Object.class); } /** * Create a new decoder using the expected type to decode to * * @param props The decoder configuration * @param type The type of objects constructed */ public KafkaJsonDecoder(VerifiableProperties props, Class<T> type) { configure(new KafkaJsonDecoderConfig(props.props()), type); } @Override public T fromBytes(byte[] bytes) { return super.deserialize(null, bytes); } }