Thanks Mathias . How do I deal with this scenario in the case of a
consumer   that expects a specific record  type  ?.I am trying to write  an
integration test   for a scenario for the below scenairo.All of these uses
an avro object as the value for producer record .I am  kind of able to
write this  for simple data types but  have no luck with avro.

Produces record > topic > consumer > doWork() > produce .

On Mon, Oct 29, 2018 at 4:50 PM Matthias J. Sax <[email protected]>
wrote:

> You set:
>
> >
> senderProps.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG,avroSerializer.getClass());
>
> This will tell the Producer to create a new AvroSerailizer object, and
> this object expects "schema.registry.url" to be set during
> initialization, ie, you need to add the config to `senderProps`.
>
> However, this will overall not give you want to what IMHO, as the
> Producer won't used MockSchemaRegistry for this case.
>
> You would need to use
>
> > avroSerializer = new KafkaAvroSerializer(schemaRegistry, new
> HashMap(defaultConfig));
>
> outside of the producer in your tests (ie, serialize the data
> "manually"), and pass `byte[]/byte[]` type into the producer itself.
>
>
> -Matthias
>
> On 10/29/18 2:56 PM, chinchu chinchu wrote:
> > Hey folks,
> > I am  getting the below exception when using a mockSchemaRegsitry in a
> > junit test . I appreciate your help.I am  using confluent 4.0
> >
> >
> >   private  SchemaRegistryClient schemaRegistry;
> >   private  KafkaAvroSerializer avroSerializer;
> >
> > Properties defaultConfig = new Properties();
> >
> defaultConfig.put(KafkaAvroDeserializerConfig.SCHEMA_REGISTRY_URL_CONFIG, "
> > http://fake-url";);
> > defaultConfig.put("auto.register.schemas", false);
> >     schemaRegistry = new MockSchemaRegistryClient();
> >     avroSerializer = new KafkaAvroSerializer(schemaRegistry, new
> > HashMap(defaultConfig));
> >  Map<String, Object> senderProps  =
> > KafkaTestUtils.producerProps(embeddedKafka);
> > senderProps.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG,
> > StringSerializer.class);
> >
> senderProps.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG,avroSerializer.getClass());
> > KafkaProducer<String, Log> producer = new
> > KafkaProducer<String,Log>(senderProps);
> > ProducerRecord<String,Log> record =new
> > ProducerRecord<String,Log>("test2","1",log);
> > try {
> > producer.send(record).get();
> > } catch (InterruptedException e) {
> > // TODO Auto-generated catch block
> > e.printStackTrace();
> > }
> >
> > Error
> > ==============
> > org.apache.kafka.common.KafkaException: Failed to construct kafka
> producer
> > at
> >
> org.apache.kafka.clients.producer.KafkaProducer.<init>(KafkaProducer.java:441)
> > at
> >
> org.apache.kafka.clients.producer.KafkaProducer.<init>(KafkaProducer.java:268)
> > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> > at
> >
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> > at
> >
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> > at java.lang.reflect.Method.invoke(Method.java:498)
> > at
> >
> org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
> > at
> >
> org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
> > at
> >
> org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
> > at
> >
> org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
> > at
> >
> org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
> > at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
> > at
> >
> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
> > at
> >
> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
> > at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
> > at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
> > at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
> > at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
> > at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
> > at org.junit.rules.ExternalResource$1.evaluate(ExternalResource.java:48)
> > at org.junit.rules.RunRules.evaluate(RunRules.java:20)
> > at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
> > at
> >
> org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
> > at
> >
> org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
> > at
> >
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:538)
> > at
> >
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:760)
> > at
> >
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:460)
> > at
> >
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:206)
> > Caused by: io.confluent.common.config.ConfigException: Missing required
> > configuration "schema.registry.url" which has no default value.
> > at io.confluent.common.config.ConfigDef.parse(ConfigDef.java:243)
> > at
> io.confluent.common.config.AbstractConfig.<init>(AbstractConfig.java:78)
> > at
> >
> io.confluent.kafka.serializers.AbstractKafkaAvroSerDeConfig.<init>(AbstractKafkaAvroSerDeConfig.java:61)
> > at
> >
> io.confluent.kafka.serializers.KafkaAvroSerializerConfig.<init>(KafkaAvroSerializerConfig.java:32)
> > at
> >
> io.confluent.kafka.serializers.KafkaAvroSerializer.configure(KafkaAvroSerializer.java:48)
> > at
> >
> org.apache.kafka.common.serialization.ExtendedSerializer$Wrapper.configure(ExtendedSerializer.java:60)
> > at
> >
> org.apache.kafka.clients.producer.KafkaProducer.<init>(KafkaProducer.java:360)
> > ... 28 more
> >
>
>

Reply via email to