본문 바로가기
클라우드 및 인프라/Kubernetes

[Kafka] class is not in the trusted packages.

by 작은소행성 2022. 5. 16.

 

class is not in the trusted packages 에러는 아마 intellij에서 producer랑 consumer를 모듈로 각각분리해서

 

entity도 개별적으로 존재? 하는 상황일 것이다 (consumer와 producer의 entity의 package fullname이 다를경우)

 

예를들어 producer쪽 entity의 package를 포함한 fullname이 zzz.xxx.producer.MyEntity 이고

 

consumer쪽 entity의 package를 포함한 fullname이 zzz.xxx.consumer.MyEntity 라면

 

consumer쪽의 JsonDeserializer에서 class is not in the trusted packages 에러를 뿜뿜할 것이다.

 

왜냐면 직렬화, 역직렬화에서는 package 이름까지 포함하기때문이다 ...

 

해결은 JsonDeserializer에 addTrustedPackages() 메서드를 수정하면 된다.

 

 

 

 

 

>> Code

    @Bean
    public ConsumerFactory<String, Object> getConsumerProps() {

        JsonDeserializer<Object> deserializer = new JsonDeserializer<>(Object.class);
        deserializer.setRemoveTypeHeaders(false);
        deserializer.addTrustedPackages("*");
        deserializer.setUseTypeMapperForKey(true);

        Map<String, Object> props = new HashMap<>();
        props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, BOOTSTRAP_SERVER);
        props.put(ConsumerConfig.GROUP_ID_CONFIG, KAFKA_GROUPID);
        props.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "latest");
        props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
        props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, deserializer);
        return new DefaultKafkaConsumerFactory<>(
                props,
                new StringDeserializer(),
                deserializer);
    }


    @Bean
    public ConcurrentKafkaListenerContainerFactory<String, Object> consumerListener() {
        ConcurrentKafkaListenerContainerFactory<String, Object> factory = new ConcurrentKafkaListenerContainerFactory<>();
        factory.setConsumerFactory(getConsumerProps());
        return factory;
    }

 

 

반응형