How to create plc4x endpoint in camel

173 Views Asked by At

I am using ModbusPal to create the Virtual modbus.

I am using the endpoint URI as:

plc4x:modbus-tcp://localhost:502?unitId=1&dataType=holding-register&addresses=1

Following is the screenshot of Modbus holding registers: enter image description here

But when starting camel context it throws NullPointerException.

java.lang.NullPointerException
    at org.apache.camel.component.plc4x.Plc4XConsumer.startUnTriggered(Plc4XConsumer.java:89)
    at org.apache.camel.component.plc4x.Plc4XConsumer.doStart(Plc4XConsumer.java:81)
    at org.apache.camel.support.service.BaseService.start(BaseService.java:119)

I debugged it and found the problem is with this line:

        for (Map.Entry<String, Object> tag : tags.entrySet()) {

Here tags is null, so basically I am not configuring the endpoint correctly.

How can I write the endpoint correctly?

Edit: Camel core version : 3.20.2 Camel-PLC4X version : 3.20.2

But when I am configuring the endpoint by creating an instance of Plc4XEndpoint and then configuring the tags there, it works like:

Map<String, Object> map = new HashMap<>();
            map.put("value-1", "holding-register:1");
            
            Plc4XEndpoint plc4xEndpoint = new Plc4XEndpoint("plc4x:modbus-tcp://localhost:502",
                    getContext().getComponent("plc4x"));
            plc4xEndpoint.setTags(map);
            from(plc4xEndpoint).log("value : ${body}");

But why it is not working if I configure the endpoint as just String?

0

There are 0 best solutions below