When just running the default Micronaut project, it fails to connect to eureka No serializable introspection present for type PortWrapper portWrapper.
I created the project like this:
mn create-app --features=discovery-eureka,graalvm example.micronaut.bookcatalogue --build=maven --lang=java
__ __ _ _
| \/ (_) ___ _ __ ___ _ __ __ _ _ _| |_
| |\/| | |/ __| '__/ _ \| '_ \ / _` | | | | __|
| | | | | (__| | | (_) | | | | (_| | |_| | |_
|_| |_|_|\___|_| \___/|_| |_|\__,_|\__,_|\__|
15:24:05.605 [main] INFO i.m.context.DefaultBeanContext - Reading bootstrap environment configuration
15:24:06.056 [main] INFO io.micronaut.runtime.Micronaut - Startup completed in 622ms. Server Running: http://localhost:8888
15:24:16.073 [default-nioEventLoopGroup-1-2] WARN i.n.channel.DefaultChannelPipeline - An exceptionCaught() event was fired, and it reached at the tail of the pipeline. It usually means the last handler in the pipeline did not handle the exception.
ioty.handler.timeout.ReadTimeoutException: null
15:24:19.106 [default-nioEventLoopGroup-1-3] WARN i.n.channel.DefaultChannelPipeline - An exceptionCaught() event was fired, and it reached at the tail of the pipeline. It usually means the last handler in the pipeline did not handle the exception.
ioty.handler.timeout.ReadTimeoutException: null
15:24:22.121 [default-nioEventLoopGroup-1-4] WARN i.n.channel.DefaultChannelPipeline - An exceptionCaught() event was fired, and it reached at the tail of the pipeline. It usually means the last handler in the pipeline did not handle the exception.
ioty.handler.timeout.ReadTimeoutException: null
15:24:25.131 [default-nioEventLoopGroup-1-5] WARN i.n.channel.DefaultChannelPipeline - An exceptionCaught() event was fired, and it reached at the tail of the pipeline. It usually means the last handler in the pipeline did not handle the exception.
ioty.handler.timeout.ReadTimeoutException: null
15:24:28.139 [default-nioEventLoopGroup-1-6] WARN i.n.channel.DefaultChannelPipeline - An exceptionCaught() event was fired, and it reached at the tail of the pipeline. It usually means the last handler in the pipeline did not handle the exception.
ioty.handler.timeout.ReadTimeoutException: null
15:24:31.153 [default-nioEventLoopGroup-1-7] WARN i.n.channel.DefaultChannelPipeline - An exceptionCaught() event was fired, and it reached at the tail of the pipeline. It usually means the last handler in the pipeline did not handle the exception.
ioty.handler.timeout.ReadTimeoutException: null
15:24:34.168 [default-nioEventLoopGroup-1-8] WARN i.n.channel.DefaultChannelPipeline - An exceptionCaught() event was fired, and it reached at the tail of the pipeline. It usually means the last handler in the pipeline did not handle the exception.
ioty.handler.timeout.ReadTimeoutException: null
15:24:36.200 [default-nioEventLoopGroup-1-12] ERROR i.m.d.registration.AutoRegistration - Error occurred during service registration with Eureka: Error encoding object [bookcatalogue:8888] to JSON: No serializable introspection present for type PortWrapper portWrapper. Consider adding Serdeable. Serializable annotate to type PortWrapper portWrapper. Alternatively if you are not in control of the project's source code, you can use @SerdeImport(PortWrapper.class) to enable serialization of this type.
io.micronaut.http.codec.CodecException: Error encoding object [bookcatalogue:8888] to JSON: No serializable introspection present for type PortWrapper portWrapper. Consider adding Serdeable. Serializable annotate to type PortWrapper portWrapper. Alternatively if you are not in control of the project's source code, you can use @SerdeImport(PortWrapper.class) to enable serialization of this type.
at io.micronaut.json.body.JsonMessageHandler.decorateWrite(JsonMessageHandler.java:129)
at io.micronaut.json.body.JsonMessageHandler.writeTo(JsonMessageHandler.java:142)
at io.micronaut.http.body.MessageBodyWriter.writeTo(MessageBodyWriter.java:180)
at io.micronaut.httpty.body.NettyJsonHandler.writeTo(NettyJsonHandler.java:130)
at io.micronaut.http.clientty.DefaultHttpClient.buildNettyRequest(DefaultHttpClient.java:1350)
at io.micronaut.http.clientty.DefaultHttpClient.sendRequestThroughChannel(DefaultHttpClient.java:1504)
at io.micronaut.http.clientty.DefaultHttpClient.lambda$exchangeImpl$26(DefaultHttpClient.java:1115)
at reactor.core.publisher.FluxCreate.subscribe(FluxCreate.java:97)
at reactor.core.publisher.Flux.subscribe(Flux.java:8848)
at reactor.core.publisher.MonoFlatMapMany$FlatMapManyMain.onNext(MonoFlatMapMany.java:196)
at reactor.core.publisher.MonoNext$NextSubscriber.onNext(MonoNext.java:82)
at reactor.core.publisher.MonoNext$NextSubscriber.onNext(MonoNext.java:82)
at io.micronaut.http.clientty.CancellableMonoSink.tryForward(CancellableMonoSink.java:79)
at io.micronaut.http.clientty.CancellableMonoSink.tryEmitValue(CancellableMonoSink.java:98)
at io.micronaut.http.clientty.ConnectionManager$Pool$ConnectionHolder.emitPoolHandle(ConnectionManager.java:1248)
at io.micronaut.http.clientty.ConnectionManager$Pool$Http1ConnectionHolder.dispatch0(ConnectionManager.java:1407)
at io.micronaut.http.clientty.ConnectionManager$Pool$ConnectionHolder.dispatch(ConnectionManager.java:1272)
at io.micronaut.http.clientty.PoolResizer.dispatchSafe(PoolResizer.java:169)
at io.micronaut.http.clientty.PoolResizer.doSomeWork(PoolResizer.java:115)
at io.micronaut.http.clientty.PoolResizer.dirty(PoolResizer.java:77)
at io.micronaut.http.clientty.PoolResizer.onNewConnectionEstablished1(PoolResizer.java:208)
at io.micronaut.http.clientty.ConnectionManager$Pool$Http1ConnectionHolder.init(ConnectionManager.java:1342)
at io.micronaut.http.clientty.ConnectionManager$Pool$2$1.channelActive(ConnectionManager.java:1129)
at ioty.channel.AbstractChannelHandlerContext.invokeChannelActive(AbstractChannelHandlerContext.java:260)
at ioty.channel.AbstractChannelHandlerContext.invokeChannelActive(AbstractChannelHandlerContext.java:238)
at ioty.channel.AbstractChannelHandlerContext.fireChannelActive(AbstractChannelHandlerContext.java:231)
at ioty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelActive(CombinedChannelDuplexHandler.java:412)
at ioty.channel.ChannelInboundHandlerAdapter.channelActive(ChannelInboundHandlerAdapter.java:69)
at ioty.channel.CombinedChannelDuplexHandler.channelActive(CombinedChannelDuplexHandler.java:211)
at ioty.channel.AbstractChannelHandlerContext.invokeChannelActive(AbstractChannelHandlerContext.java:260)
at ioty.channel.AbstractChannelHandlerContext.invokeChannelActive(AbstractChannelHandlerContext.java:238)
at ioty.channel.AbstractChannelHandlerContext.fireChannelActive(AbstractChannelHandlerContext.java:231)
at ioty.channel.DefaultChannelPipeline$HeadContext.channelActive(DefaultChannelPipeline.java:1345)
at ioty.channel.AbstractChannelHandlerContext.invokeChannelActive(AbstractChannelHandlerContext.java:258)
at ioty.channel.AbstractChannelHandlerContext.invokeChannelActive(AbstractChannelHandlerContext.java:238)
at ioty.channel.DefaultChannelPipeline.fireChannelActive(DefaultChannelPipeline.java:844)
at ioty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.fulfillConnectPromise(AbstractNioChannel.java:310)
at ioty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:340)
at ioty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:776)
at ioty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724)
at ioty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650)
at ioty.channel.nio.NioEventLoop.run(NioEventLoop.java:562)
at ioty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997)
at ioty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at ioty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.base/java.lang.Thread.run(Thread.java:1583)
Caused by: io.micronaut.serde.exceptions.SerdeException: No serializable introspection present for type PortWrapper portWrapper. Consider adding Serdeable. Serializable annotate to type PortWrapper portWrapper. Alternatively if you are not in control of the project's source code, you can use @SerdeImport(PortWrapper.class) to enable serialization of this type.
at io.micronaut.serde.support.serializers.RuntimeTypeSerializer.lambda$getSerializer$0(RuntimeTypeSerializer.java:135)
at java.base/java.util.concurrent.ConcurrentHashMapputeIfAbsent(ConcurrentHashMap.java:1708)
at io.micronaut.serde.support.serializers.RuntimeTypeSerializer.getSerializer(RuntimeTypeSerializer.java:131)
at io.micronaut.serde.support.serializers.RuntimeTypeSerializer.serialize(RuntimeTypeSerializer.java:76)
at io.micronaut.serde.support.serializers.CustomizedObjectSerializer.serializeInto(CustomizedObjectSerializer.java:136)
at io.micronaut.serde.support.serializers.CustomizedObjectSerializer.serialize(CustomizedObjectSerializer.java:56)
at io.micronaut.serde.support.serializers.WrappedObjectSerializer.serialize(WrappedObjectSerializer.java:48)
at io.micronaut.serde.support.serializers.ErrorCatchingSerializer.serialize(ErrorCatchingSerializer.java:45)
at io.micronaut.serde.jackson.JacksonJsonMapper.writeValue(JacksonJsonMapper.java:230)
at io.micronaut.serde.jackson.JacksonJsonMapper.writeValue(JacksonJsonMapper.java:314)
at io.micronaut.json.body.JsonMessageHandler.writeTo(JsonMessageHandler.java:140)
... 44 common frames omitted
Caused by: io.micronaut.core.beans.exceptions.IntrospectionException: No serializable introspection present for type PortWrapper portWrapper. Consider adding Serdeable. Serializable annotate to type PortWrapper portWrapper. Alternatively if you are not in control of the project's source code, you can use @SerdeImport(PortWrapper.class) to enable serialization of this type.
at io.micronaut.serde.support.DefaultSerdeIntrospections.getSerializableIntrospection(DefaultSerdeIntrospections.java:111)
at io.micronaut.serde.support.serializers.SerBean.<init>(SerBean.java:117)
at io.micronaut.serde.support.serializers.ObjectSerializer.lambda$getSerializableBean$0(ObjectSerializer.java:165)
at io.micronaut.core.util.SupplierUtil$2.get(SupplierUtil.java:79)
at io.micronaut.serde.support.serializers.ObjectSerializer.getSerializableBean(ObjectSerializer.java:170)
at io.micronaut.serde.support.serializers.ObjectSerializer.createSpecificInternal(ObjectSerializer.java:107)
at io.micronaut.serde.support.serializers.ObjectSerializer.createSpecific(ObjectSerializer.java:99)
at io.micronaut.serde.support.serializers.SerBean.initProperty(SerBean.java:418)
at io.micronaut.serde.support.serializers.SerBean.lambda$new$13(SerBean.java:279)
at io.micronaut.serde.support.serializers.SerBean.initialize(SerBean.java:389)
at io.micronaut.serde.support.serializers.ObjectSerializer.getSerializableBean(ObjectSerializer.java:171)
at io.micronaut.serde.support.serializers.ObjectSerializer.createSpecificInternal(ObjectSerializer.java:107)
at io.micronaut.serde.support.serializers.ObjectSerializer.createSpecific(ObjectSerializer.java:99)
at io.micronaut.serde.jackson.JacksonJsonMapper.writeValue(JacksonJsonMapper.java:227)
... 46 common frames omitted
My expectation was that the basic Micronaut Application straight out of the examples would register with eureka.
I did search quite a bit for this issue, but did not get many results so either I did something wrong or the discovery feature is not widely adopted and therefor this issue has not been detected.