0

I'm trying to connect Kafka with wso2 Micro Integrator by following this instructions. I used WSO2's Integration Studio to develop this. Here is the code,

<?xml version="1.0" encoding="UTF-8"?>
<api context="/create-customer" name="create-customer" xmlns="http://ws.apache.org/ns/synapse">
    <resource methods="POST">
        <inSequence>
            <kafkaTransport.init>
                <bootstrapServers>localhost:9092</bootstrapServers>
                <keySerializerClass>org.apache.kafka.common.serialization.StringSerializer</keySerializerClass>
                <valueSerializerClass>org.apache.kafka.common.serialization.StringSerializer</valueSerializerClass>
            </kafkaTransport.init>
            <kafkaTransport.publishMessages>
                <topic>customer</topic>
            </kafkaTransport.publishMessages>
            <respond/>
        </inSequence>
        <outSequence/>
        <faultSequence/>
    </resource>
</api>

But when I send the request, I got following Error.

[2023-01-14 21:27:36,570]  INFO {KafkaProduceConnector} - {api:create-customer} SEND : send message to  Broker lists
[2023-01-14 21:27:36,583] ERROR {KafkaProduceConnector} - {api:create-customer} Kafka producer connector : Error sending the message to broker org.wso2.carbon.connector.exception.InvalidConfigurationException: Connection name is not set.
    at org.wso2.carbon.connector.KafkaProduceConnector.getConnectionName(KafkaProduceConnector.java:262)
    at org.wso2.carbon.connector.KafkaProduceConnector.publishMessage(KafkaProduceConnector.java:237)
    at org.wso2.carbon.connector.KafkaProduceConnector.connect(KafkaProduceConnector.java:138)
    at org.wso2.carbon.connector.core.AbstractConnector.mediate(AbstractConnector.java:32)
    at org.apache.synapse.mediators.ext.ClassMediator.updateInstancePropertiesAndMediate(ClassMediator.java:178)
    at org.apache.synapse.mediators.ext.ClassMediator.mediate(ClassMediator.java:97)
    at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:110)
    at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:72)
    at org.apache.synapse.mediators.template.TemplateMediator.mediate(TemplateMediator.java:136)
    at org.apache.synapse.mediators.template.InvokeMediator.mediate(InvokeMediator.java:170)
    at org.apache.synapse.mediators.template.InvokeMediator.mediate(InvokeMediator.java:93)
    at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:110)
    at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:72)
    at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:158)
    at org.apache.synapse.api.Resource.process(Resource.java:342)
    at org.apache.synapse.api.API.process(API.java:477)
    at org.apache.synapse.api.AbstractApiHandler.apiProcess(AbstractApiHandler.java:93)
    at org.apache.synapse.api.AbstractApiHandler.dispatchToAPI(AbstractApiHandler.java:71)
    at org.apache.synapse.api.rest.RestRequestHandler.dispatchToAPI(RestRequestHandler.java:90)
    at org.apache.synapse.api.rest.RestRequestHandler.process(RestRequestHandler.java:76)
    at org.apache.synapse.rest.RESTRequestHandler.process(RESTRequestHandler.java:54)
    at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2SynapseEnvironment.java:344)
    at org.apache.synapse.core.axis2.SynapseMessageReceiver.receive(SynapseMessageReceiver.java:101)
    at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180)
    at org.apache.synapse.transport.passthru.ServerWorker.processNonEntityEnclosingRESTHandler(ServerWorker.java:376)
    at org.apache.synapse.transport.passthru.ServerWorker.processEntityEnclosingRequest(ServerWorker.java:435)
    at org.apache.synapse.transport.passthru.ServerWorker.run(ServerWorker.java:183)
    at org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    at java.base/java.lang.Thread.run(Thread.java:829)

I'm using MI 4.1.0 version and kafka 2.12 as required in the documentation. The Kafka connector used inside Integration studio is 3.12. As I noticed, according to this reference, inside <kafkaTransport.init> we can send a connection name. But Integration Studio doesn't allows me to add it inside it. When I checked the properties of <kafkaTransport.init>, it doesn't have a connection name field. Can anyone help me to get over this?

Anupa_sj
  • 1
  • 1

1 Answers1

0

Indeed in <kafkaTransport.init> there should be name field usable. That may be a bug. In sourceCode it looks like can be retrieve from message context. Try declare this as property name, like below:

<property name="name" value="Kafka_Sample" scope="default"/>

Set this before <kafkaTransport.publishMessages>

tmoasz
  • 1,244
  • 2
  • 10
  • 15