Hi, The error happens in Java >= 16 specific implemnetation in https://github.com/apache/aries-typedevent/blob/f56ca7ccd24cf8760a1c64a18e6ec5fffa63bd84/org.apache.aries.typedevent.bus/src/main/java16/org/apache/aries/typedevent/bus/impl/RecordConverter.java#L63-L64 because collector toMap is not able to create Map with nullable fields.
Maybe the workaround could be: a) to have Optional<Sth> type for nullable fields in the event? b) to have some marker value in the event instead of null value? In the code: a) toMap call could be replaced with custom implementation creating Map or b) null values could be excluded before final call to collect. Thomas, would you like to provide a test in a PR to https://github.com/apache/aries-typedevent showing the problem? You can create a Jira issue in https://issues.apache.org/jira/projects/ARIES/ wt., 29 kwi 2025 o 16:51 Thomas Calmant <[email protected]> napisaĆ(a): > Hi, > > I'm working on Eclipse sensiNact, which uses Apache Aries Typed > Event 1.0.0. > > I've encountered a problem where events containing beans with null field > values trigger ConversionException errors when sent to the Typed Event Bus. > The exception occurs during the conversion process from a custom type to a > map. > > Is there a known workaround for this issue? > > Here is a sample stack trace: > ERROR org.apache.aries.typedevent.bus.impl.EventTask -- The event delivery > failed for task type. > org.osgi.util.converter.ConversionException: Cannot convert > ResourceDataNotification[modelPackageUri= > https://eclipse.org/sensinact/default, model=sensinact, > provider=sensiNact, service=admin, resource=model, oldValue=null, > newValue=sensinact, timestamp=2025-04-29T13:31:22.984828100Z, type=class > java.lang.String, metadata={value=sensinact, > timestamp=2025-04-29T13:31:22.984828100Z}] to > java.util.Map<java.lang.String, java.lang.Object> > at > org.osgi.util.converter.CustomConverterImpl$ConvertingWrapper.to(CustomConverterImpl.java:177) > at > org.osgi.util.converter.CustomConverterImpl$ConvertingWrapper.to(CustomConverterImpl.java:151) > at > org.osgi.util.converter.CustomConverterImpl$ConvertingWrapper.to(CustomConverterImpl.java:146) > at > org.apache.aries.typedevent.bus.impl.EventConverter.toUntypedEvent(EventConverter.java:292) > at > org.apache.aries.typedevent.bus.impl.MonitorEventTask.unsafeNotify(MonitorEventTask.java:43) > at > org.apache.aries.typedevent.bus.impl.EventTask.notifyListener(EventTask.java:29) > at > org.apache.aries.typedevent.bus.impl.TypedEventBusImpl$EventThread.run(TypedEventBusImpl.java:648) > Caused by: java.lang.NullPointerException: null > at java.base/java.util.Objects.requireNonNull(Objects.java:208) > at > java.base/java.util.stream.Collectors.lambda$uniqKeysMapAccumulator$1(Collectors.java:180) > at > java.base/java.util.stream.ReduceOps$3ReducingSink.accept(ReduceOps.java:169) > at > java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) > at > java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) > at > java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) > at > java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) > at > java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) > at > java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682) > at > org.apache.aries.typedevent.bus.impl.RecordConverter.convert(RecordConverter.java:64) > at > org.apache.aries.typedevent.bus.impl.EventConverter.convertRecord(EventConverter.java:116) > at > org.osgi.util.converter.CustomConverterImpl$ConvertingWrapper.to(CustomConverterImpl.java:169) > ... 6 common frames omitted > > > Thanks for the help > Thomas > > -- Regards, Dominik Przybysz
