当前位置: 首页 > 知识库问答 >
问题:

Quarkus应用程序中Kafka反序列化程序中的CDI上下文

巫马俊力
2023-03-14

我有一个Quarkus项目,基于Kafka的Smallrye反应式消息传递。因为我想使用“复杂的pojo”,所以我需要一个定制的反序列化程序。

我想制作这两个类CDI bean,这样我就可以注入和使用我的自定义记录器,它是一个CDI bean。有没有办法实现这一点?

现在,我的注入记录器对象只是空的:

import org.apache.kafka.common.serialization.Serializer;
import javax.enterprise.context.ApplicationScoped;
import javax.inject.Inject;

@ApplicationScoped
public class MySerializer implements Serializer<MyDto>
{
    @Inject MyLogger logger;

    @Override public byte[] serialize(String topicName, MyDto myDto)
    {
        // this causes a java.lang.NullPointerException
        logger.info("serializing");

        ...
    }
}

共有1个答案

方河
2023-03-14

据我所知,你只能用kafka注册一个类名,它会在内部创建那个类,即。不使用CDI。

可能的解决方法:使注册对象成为CDI bean的薄包装,并将工作委托给该bean:

public class MySerializer implements Serializer<MyDto> {
    private MySerializerCdi delegate;

    public MySerializer() {
        delegate = CDI.current().select(MySerializerCdi.class).get();
    }

    @Override public byte[] serialize(String topicName, MyDto myDto) {
        return delegate.serialize(topicName, myDto);
    }
    ...
}

... 并相应地重命名您原来的CDI类。

 类似资料:
  • 我遇到了类似的问题:Kafka反序列化我的Kafka生产者中的嵌套泛型类型,我发送的对象如下所示: 其基石是:。 此界面如下所示: 添加字段@class是因为@JsonTypeInfo注释,我认为这足以让反序列化器“理解”在反序列化中使用什么类型的IExternalData。不幸的是,在Kafka的听众那边,我得到了一个例外: 无法构造的实例(不存在像default construct这样的创建者

  • 我使用的是Spring Kafka 1.1.2-Spring Boot 1.5.0 RC版本,并且配置了一个自定义值serialiser/Deserialiser类,扩展/。这些类确实使用Jackson ObjectMapper,它可以通过构造函数提供。 是否可以从Spring上下文中注入ObjectMapper?我已经配置了一个ObjectMapper,我希望在序列化/反序列化程序中重用它。

  • 我在Jackson的自定义反序列化程序中有一个问题。我想访问默认序列化程序来填充我要反序列化到的对象。在填充之后,我将执行一些自定义操作,但首先我要使用默认的Jackson行为反序列化对象。 这是我现在有的代码。 我需要的是一种初始化默认反序列化器的方法,这样我就可以在开始我的特殊逻辑之前预填充我的POJO。 当从自定义反序列化程序内调用deserialize时,无论我如何构造序列化程序类,该方法

  • 我使用的是JAVA 1.6和Jackson 1.9.9我有一个枚举 我添加了一个@jsonValue,这似乎完成了它将对象序列化为:

  • 我正在努力实现的是: 我们有一个JSON对象流进来。 我想从JSON重建一个Java对象。 我想应用转换(如更改字符串的格式和拒绝一个对象,如果满足一些条件,如'isToBe消耗'==false和可能的平坦从嵌套到线性的继承) 我希望能够将JSON对象的值存储到数据库中。 当一种新类型的JSON对象流出现时,我可以为每种类型的流运行CREATE TABLE,但我不想做任何代码更改。 换句话说,我希

  • 我在使用Jackson1.9.13(和Jackson2.5.0)进行序列化/反序列化时遇到了一个问题,现在已经解决了几天了,没有任何成功。 我的目标是使用@jsonanygetter&@jsonanysetter,我想动态地计算对象是否应该写入输出。我有一个用ObjectMapper序列化的JSON定义(并检查是否应该包含对象),然后将对象转换回字符串。 为此,我使用了一个“HidableSeri