frankpuppa opened a new issue, #2280:
URL: https://github.com/apache/plc4x/issues/2280
### What happened?
Hello,
I was reading some variables from a device and I bumped into a null pointer
exception issue. The scenario is this:
Variables to read:
```
2,"MAPI010_f_Used","DB40.DBX51.2","BOOL"
3,"VFD_IRR_actCds","DB1100.0","INT"
```
As you can see variable **VFD_IRR_actCds** has an invalid address.
In AbstractPlcConnection.java the code handles the request:
```
Map<String, PlcResponseItem<PlcValue>> values = new
HashMap<>();
for (String tagName : readRequest.getTagNames()) {
// If the tag was correct, then we expect a response in
the response.
if(filteredReadRequest.getTagResponseCode(tagName) !=
null) {
values.put(tagName, ((DefaultPlcReadResponse)
filteredReadResponse).getPlcResponseItem(tagName));
}
// In all other cases forward the initial error to the
final output.
else {
values.put(tagName, new
DefaultPlcResponseItem<>(readRequest.getTagResponseCode(tagName), null));
}
}
```
Calling:
```
filteredReadRequest.getTagResponseCode(tagName)
```
raise a null pointer exception.
Here is the error:
```
2025-09-26T12:58:18.043+02:00 ERROR 1738231 --- [ntLoopGroup-2-1]
org.apache.plc4x.examples.s7.S7Test : Error during read from PLC
java.lang.NullPointerException: Cannot invoke
"org.apache.plc4x.java.spi.messages.utils.PlcTagItem.getResponseCode()" because
the return value of "java.util.LinkedHashMap.get(Object)" is null
java.util.concurrent.CompletionException: java.lang.NullPointerException:
Cannot invoke
"org.apache.plc4x.java.spi.messages.utils.PlcTagItem.getResponseCode()" because
the return value of "java.util.LinkedHashMap.get(Object)" is null
at
java.base/java.util.concurrent.CompletableFuture.encodeThrowable(CompletableFuture.java:315)
at
java.base/java.util.concurrent.CompletableFuture.completeThrowable(CompletableFuture.java:320)
at
java.base/java.util.concurrent.CompletableFuture$UniApply.tryFire(CompletableFuture.java:649)
at
java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510)
at
java.base/java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:2179)
at
org.apache.plc4x.java.spi.optimizer.BaseOptimizer.lambda$8(BaseOptimizer.java:206)
at
java.base/java.util.concurrent.CompletableFuture.uniHandle(CompletableFuture.java:934)
at
java.base/java.util.concurrent.CompletableFuture$UniHandle.tryFire(CompletableFuture.java:911)
at
java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510)
at
java.base/java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:2179)
at
org.apache.plc4x.java.s7light.readwrite.protocol.S7ProtocolLogic.lambda$14(S7ProtocolLogic.java:217)
at
java.base/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:863)
at
java.base/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:841)
at
java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510)
at
java.base/java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:2179)
at
org.apache.plc4x.java.s7light.readwrite.protocol.S7ProtocolLogic.lambda$26(S7ProtocolLogic.java:523)
at
java.base/java.util.function.Consumer.lambda$andThen$0(Consumer.java:65)
at
org.apache.plc4x.java.spi.Plc4xNettyWrapper.decode(Plc4xNettyWrapper.java:203)
at
io.netty.handler.codec.MessageToMessageCodec$1.decode(MessageToMessageCodec.java:67)
at
io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:91)
at
io.netty.handler.codec.MessageToMessageCodec.channelRead(MessageToMessageCodec.java:120)
at
io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442)
at
io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
at
io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)
at
io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:107)
at
io.netty.handler.codec.MessageToMessageCodec.channelRead(MessageToMessageCodec.java:120)
at
io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442)
at
io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
at
io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)
at
io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:346)
at
io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:318)
at
io.netty.handler.codec.ByteToMessageCodec.channelRead(ByteToMessageCodec.java:103)
at
io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442)
at
io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
at
io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)
at
io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357)
at
io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440)
at
io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
at
io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868)
at
io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166)
at
io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:796)
at
io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:732)
at
io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:658)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562)
at
io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:998)
at
io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at
io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.base/java.lang.Thread.run(Thread.java:1583)
Caused by: java.lang.NullPointerException: Cannot invoke
"org.apache.plc4x.java.spi.messages.utils.PlcTagItem.getResponseCode()" because
the return value of "java.util.LinkedHashMap.get(Object)" is null
at
org.apache.plc4x.java.spi.messages.DefaultPlcReadRequest.getTagResponseCode(DefaultPlcReadRequest.java:86)
at
org.apache.plc4x.java.spi.connection.AbstractPlcConnection.lambda$0(AbstractPlcConnection.java:221)
at
java.base/java.util.concurrent.CompletableFuture$UniApply.tryFire(CompletableFuture.java:646)
... 45 more
```
This causes the whole request to fail, which in my opinion is not ideal.
I made a fix here:
[commit](https://github.com/apache/plc4x/commit/d1e131c7904595a0139e097ba6b0facfb5c45403)
Let me know if you want me to open a PR.
Best regards.
### Version
v0.13.0
### Programming Languages
- [ ] plc4c
- [ ] plc4go
- [x] plc4j
- [ ] plc4net
- [ ] plc4py
### Protocols
- [ ] AB-Ethernet
- [ ] ADS /AMS
- [ ] BACnet/IP
- [ ] C-Bus
- [ ] CANopen
- [ ] EtherNet/IP
- [ ] Firmata
- [ ] IEC-69870
- [ ] KNXnet/IP
- [ ] Modbus
- [ ] OPC-UA
- [ ] Profinet
- [ ] S7
- [x] S7-light
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]