You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I'm generating Java code from a massive crd (20k lines...). The Java generator works correctly, but when trying to list existing objects Jackson fails with a java.lang.ClassCastException (see full stack trace below). Here's the bit that fails on serialization, as well as relevant code.
matches the line private TransitionStatus transitionStatus = io.fabric8.kubernetes.client.utils.Serialization.unmarshal("\"UpToDate\"", TransitionStatus.class);
So I'm guessing this has to do with the fact that it's trying to instantiate transitionStatus field, but where does the Map in the exception come from, I've no idea.
Caused by: io.fabric8.kubernetes.client.KubernetesClientException: An error has occurred.
at io.fabric8.kubernetes.client.KubernetesClientException.launderThrowable(KubernetesClientException.java:129)
at io.fabric8.kubernetes.client.KubernetesClientException.launderThrowable(KubernetesClientException.java:122)
at io.fabric8.kubernetes.client.utils.Serialization.unmarshal(Serialization.java:244)
at io.fabric8.kubernetes.client.utils.Serialization.unmarshal(Serialization.java:351)
at io.fabric8.kubernetes.client.utils.Serialization.unmarshal(Serialization.java:320)
at io.fabric8.kubernetes.client.dsl.internal.OperationSupport.lambda$handleResponse$0(OperationSupport.java:578)
at java.base/java.util.concurrent.CompletableFuture$UniApply.tryFire(CompletableFuture.java:646)
at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510)
at java.base/java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:2147)
at io.fabric8.kubernetes.client.dsl.internal.OperationSupport.lambda$retryWithExponentialBackoff$2(OperationSupport.java:618)
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:2147)
at io.fabric8.kubernetes.client.okhttp.OkHttpClientImpl$4.onResponse(OkHttpClientImpl.java:277)
at okhttp3.RealCall$AsyncCall.execute(RealCall.java:174)
at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
... 1 more
Caused by: com.fasterxml.jackson.databind.exc.ValueInstantiationException: Cannot construct instance of `io.kserve.serving.v1beta1.inferenceservicestatus.ModelStatus`, problem: class java.lang.String cannot be cast to class java.util.Map (java.lang.String and java.util.Map are in module java.base of loader 'bootstrap')
at [Source: UNKNOWN; byte offset: #UNKNOWN] (through reference chain: io.fabric8.kubernetes.api.model.DefaultKubernetesResourceList["items"]->java.util.ArrayList[0]->io.kserve.serving.v1beta1.InferenceService["status"]->io.kserve.serving.v1beta1.InferenceServiceStatus["modelStatus"])
at com.fasterxml.jackson.databind.exc.ValueInstantiationException.from(ValueInstantiationException.java:47)
at com.fasterxml.jackson.databind.DeserializationContext.instantiationException(DeserializationContext.java:2052)
at com.fasterxml.jackson.databind.deser.std.StdValueInstantiator.wrapAsJsonMappingException(StdValueInstantiator.java:587)
at com.fasterxml.jackson.databind.deser.std.StdValueInstantiator.rewrapCtorProblem(StdValueInstantiator.java:610)
at com.fasterxml.jackson.databind.deser.std.StdValueInstantiator.createUsingDefault(StdValueInstantiator.java:280)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:303)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:177)
at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:129)
at io.fabric8.kubernetes.model.jackson.SettableBeanPropertyDelegate.deseridSet(SettableBeanPropertyDelegate.java:134)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:314)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:177)
at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:129)
at io.fabric8.kubernetes.model.jackson.SettableBeanPropertyDelegate.deserializeAndSet(SettableBeanPropertyDelegate.java:134)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:314)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:177)
at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:323)
at com.fasterxml.jackson.databind.ObjectMapper._readValue(ObjectMapper.java:4706)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2879)
at com.fasterxml.jackson.databind.ObjectMapper.treeToValue(ObjectMapper.java:3343)
at io.fabric8.kubernetes.internal.KubernetesDeserializer.fromObjectNode(KubernetesDeserializer.java:125)
at io.fabric8.kubernetes.internal.KubernetesDeserializer.deserialize(KubernetesDeserializer.java:89)
at io.fabric8.kubernetes.internal.KubernetesDeserializer.deserialize(KubernetesDeserializer.java:47)
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer._deserializeFromArray(CollectionDeserializer.java:359)
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:244)
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:28)
at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:129)
at io.fabric8.kubernetes.model.jackson.SettableBeanPropertyDelegate.deserializeAndSet(SettableBeanPropertyDelegate.java:134)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:314)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:177)
at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:323)
at com.fasterxml.jackson.databind.ObjectReader._bindAndClose(ObjectReader.java:2105)
at com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:1481)
at io.fabric8.kubernetes.client.utils.Serialization.unmarshal(Serialization.java:240)
... 17 more
Caused by: java.lang.ClassCastException: class java.lang.String cannot be cast to class java.util.Map (java.lang.String and java.util.Map are in module java.base of loader 'bootstrap')
at io.fabric8.kubernetes.client.utils.Serialization.unmarshal(Serialization.java:237)
at io.fabric8.kubernetes.client.utils.Serialization.unmarshal(Serialization.java:351)
at io.fabric8.kubernetes.client.utils.Serialization.unmarshal(Serialization.java:287)
at io.fabric8.kubernetes.client.utils.Serialization.unmarshal(Serialization.java:272)
at io.kserve.serving.v1beta1.inferenceservicestatus.ModelStatus.<init>(ModelStatus.java:68)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
at com.fasterxml.jackson.databind.introspect.AnnotatedConstructor.call(AnnotatedConstructor.java:123)
at com.fasterxml.jackson.databind.deser.std.StdValueInstantiator.createUsingDefault(StdValueInstantiator.java:278)
... 45 more
Hi @lmyslinski , thank you for taking the time to report this issue!
I'm not managing to reproduce the issue, can you please confirm that you are using the version 6.4.1 for both, the java-generator and the kubernetes-client runtime?
I do notice slight differences between the yaml snippet above and the CRD at the provided link, more specifically I see that the enums have empty strings which were not supported before #4769 .
You should be able to reproduce the issue using a script like this:
Wow, thanks for looking into this - you're correct, it was a problem with version mismatch. Once I made sure the k8s client was also 6.4.1 (instead of 6.2.0), the error went away. I did run into some more problems with Jackson but after applying tweaks as described in #1308 everything worked. Thanks a lot for the help!
Describe the bug
I'm generating Java code from a massive crd (20k lines...). The Java generator works correctly, but when trying to list existing objects Jackson fails with a
java.lang.ClassCastException
(see full stack trace below). Here's the bit that fails on serialization, as well as relevant code.Yaml part:
Full Model Status class:
The stacktrace bit (see full stacktrace below):
matches the line
private TransitionStatus transitionStatus = io.fabric8.kubernetes.client.utils.Serialization.unmarshal("\"UpToDate\"", TransitionStatus.class);
So I'm guessing this has to do with the fact that it's trying to instantiate
transitionStatus
field, but where does theMap
in the exception come from, I've no idea.Fabric8 Kubernetes Client version
6.4.1
Steps to reproduce
Not provided for now (Full yaml available here
Expected behavior
The java class can be instantiated
Runtime
Kubernetes (vanilla)
Kubernetes API Server version
1.24
Environment
Amazon
Fabric8 Kubernetes Client Logs
Additional context
Potentially related to #4530
The text was updated successfully, but these errors were encountered: