Micronaut doesn't seem to support @SerdeImport on classes which are already @Introspected (maybe the introspection companion objects are not compatible ?). To circumvent that we redefined com.xxxxx.datamodel.Output and com.xxxxx.datamodel.Input locally as @Serdeable objects. Which was not bad since we were already cherry-picking dependencies from the com.xxxxx.* package to build our own dtos
Same as for RemoteActionDto, Input, Output come from external dependencies of the library
In the microservice, the deserialization of RemoteActionDto fails with the following NullPoiinterException
Client 'act-api-client': Error decoding HTTP response body: Error decoding JSON stream for type [B]: Error decoding property [ScriptInfoDto scriptInfo] of type [class com.xxxxxx.tools.client.act.dto.RemoteActionDto]: Cannot invoke "io.micronaut.serde.Deserializer.deserializeNullable(io.micronaut.serde.Decoder, io.micronaut.serde.Deserializer$DecoderContext, io.micronaut.core.type.Argument)" because "this.deserializer" is null
io.micronaut.http.client.exceptions.HttpClientResponseException: Client 'act-api-client': Error decoding HTTP response body: Error decoding JSON stream for type [B]: Error decoding property [ScriptInfoDto scriptInfo] of type [class com.xxxxxxl.tools.client.act.dto.RemoteActionDto]: Cannot invoke "io.micronaut.serde.Deserializer.deserializeNullable(io.micronaut.serde.Decoder, io.micronaut.serde.Deserializer$DecoderContext, io.micronaut.core.type.Argument)" because "this.deserializer" is null
at io.micronaut.http.client.netty.DefaultHttpClient$FullHttpResponseHandler.makeNormalBodyParseError(DefaultHttpClient.java:2293)
at io.micronaut.http.client.netty.DefaultHttpClient$FullHttpResponseHandler.forwardResponseToPromise(DefaultHttpClient.java:2223)
at io.micronaut.http.client.netty.DefaultHttpClient$FullHttpResponseHandler.channelReadInstrumented(DefaultHttpClient.java:2179)
at io.micronaut.http.client.netty.DefaultHttpClient$FullHttpResponseHandler.channelReadInstrumented(DefaultHttpClient.java:2147)
...
Caused by: java.lang.NullPointerException: Cannot invoke "io.micronaut.serde.Deserializer.deserializeNullable(io.micronaut.serde.Decoder, io.micronaut.serde.Deserializer$DecoderContext, io.micronaut.core.type.Argument)" because "derProperty.deserializer" is null
at io.micronaut.serde.support.deserializers.SpecificObjectDeserializer.deserializeValue(SpecificObjectDeserializer.java:300)
at io.micronaut.serde.support.deserializers.SpecificObjectDeserializer$ConstructorValuesDeserializer.tryConsume(SpecificObjectDeserializer.java:691)
at io.micronaut.serde.support.deserializers.SpecificObjectDeserializer$ArgsConstructorBeanDeserializer.tryConsume(SpecificObjectDeserializer.java:831)
at io.micronaut.serde.support.deserializers.SpecificObjectDeserializer.deserialize(SpecificObjectDeserializer.java:105)
at io.micronaut.serde.support.deserializers.SpecificObjectDeserializer.deserialize(SpecificObjectDeserializer.java:73)
at io.micronaut.serde.support.deserializers.SpecificObjectDeserializer.deserializeNullable(SpecificObjectDeserializer.java:239)
Expected Behavior
Solution/workaround
Micronaut doesn't seem to support @SerdeImport on classes which are already @Introspected (maybe the introspection companion objects are not compatible ?). To circumvent that we redefined com.xxxxx.datamodel.Output and com.xxxxx.datamodel.Input locally as @Serdeable objects. Which was not bad since we were already cherry-picking dependencies from the com.xxxxx.* package to build our own dtos
Actual Behaviour
Purpose and Targeting classes both come from a dependency of the library defining the HTTP client.
Same as for RemoteActionDto, Input, Output come from external dependencies of the library
In the microservice, the deserialization of RemoteActionDto fails with the following NullPoiinterException
Steps To Reproduce
No response
Environment Information
Example Application
No response
Version
4.3.7