Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

istio-client query virtualservice get error: Could not resolve subtype of [simple type, class io.fabric8.istio.api.networking.v1beta1.IsHTTPRedirectRedirectPort]: #4250

Closed
huaryliu opened this issue Jul 5, 2022 · 1 comment
Assignees
Milestone

Comments

@huaryliu
Copy link

huaryliu commented Jul 5, 2022

Describe the bug

  - match:
    - uri:
        exact: /
    redirect:
      uri: /login

When virtualService has HTTPRedirect ,use istio-client query virtualservice list get a error:

Caused by: com.fasterxml.jackson.databind.exc.InvalidTypeIdException: Could not resolve subtype of [simple type, class io.fabric8.istio.api.networking.v1beta1.IsHTTPRedirectRedirectPort]: Cannot deduce unique subtype of io.fabric8.istio.api.networking.v1beta1.IsHTTPRedirectRedirectPort (2 candidates match)\n at [Source: UNKNOWN; line: -1, column: -1] (through reference chain: io.fabric8.istio.api.networking.v1beta1.VirtualService["spec"]->io.fabric8.istio.api.networking.v1beta1.VirtualServiceSpec["http"]->java.util.ArrayList[1]->io.fabric8.istio.api.networking.v1beta1.HTTPRoute["redirect"]->io.fabric8.istio.api.networking.v1beta1.HTTPRedirect["RedirectPort"])\n\tat com.fasterxml.jackson.databind.exc.InvalidTypeIdException.from(InvalidTypeIdException.java:43)\n\tat

Fabric8 Kubernetes Client version

5.12.2

Steps to reproduce

When virtualService has HTTPRedirect,yaml like this:

  - match:
    - uri:
        exact: /
    redirect:
      uri: /login

use istio-client query virtualservice list get a error:

Caused by: com.fasterxml.jackson.databind.exc.InvalidTypeIdException: Could not resolve subtype of [simple type, class io.fabric8.istio.api.networking.v1beta1.IsHTTPRedirectRedirectPort]: Cannot deduce unique subtype of `io.fabric8.istio.api.networking.v1beta1.IsHTTPRedirectRedirectPort` (2 candidates match)\n at [Source: UNKNOWN; line: -1, column: -1] (through reference chain: io.fabric8.istio.api.networking.v1beta1.VirtualService[\"spec\"]->io.fabric8.istio.api.networking.v1beta1.VirtualServiceSpec[\"http\"]->java.util.ArrayList[1]->io.fabric8.istio.api.networking.v1beta1.HTTPRoute[\"redirect\"]->io.fabric8.istio.api.networking.v1beta1.HTTPRedirect[\"RedirectPort\"])\n\tat com.fasterxml.jackson.databind.exc.InvalidTypeIdException.from(InvalidTypeIdException.java:43)\n\tat 

com.fasterxml.jackson.databind.DeserializationContext.missingTypeIdException(DeserializationContext.java:1943)\n\tat com.fasterxml.jackson.databind.DeserializationContext.handleMissingTypeId(DeserializationContext.java:1456)\n\tat com.fasterxml.jackson.databind.jsontype.impl.TypeDeserializerBase._handleMissingTypeId(TypeDeserializerBase.java:307)\n\tat com.fasterxml.jackson.databind.jsontype.impl.AsPropertyTypeDeserializer._deserializeTypedUsingDefaultImpl(AsPropertyTypeDeserializer.java:178)\n\tat com.fasterxml.jackson.databind.jsontype.impl.AsDeductionTypeDeserializer.deserializeTypedFromObject(AsDeductionTypeDeserializer.java:133)\n\tat com.fasterxml.jackson.databind.deser.AbstractDeserializer.deserializeWithType(AbstractDeserializer.java:263)\n\tat com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:138)\n\tat io.fabric8.kubernetes.client.utils.serialization.SettableBeanPropertyDelegate.deserializeAndSet(SettableBeanPropertyDelegate.java:131)\n\tat com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:324)\n\tat com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:187)\n\tat io.fabric8.kubernetes.model.jackson.JsonUnwrappedDeserializer.deserialize(JsonUnwrappedDeserializer.java:139)\n\tat com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:129)\n\tat io.fabric8.kubernetes.client.utils.serialization.SettableBeanPropertyDelegate.deserializeAndSet(SettableBeanPropertyDelegate.java:131)\n\tat com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:324)\n\tat com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:187)\n\tat com.fasterxml.jackson.databind.deser.std.CollectionDeserializer._deserializeFromArray(CollectionDeserializer.java:347)\n\tat com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:244)\n\tat com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:28)\n\tat com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:129)\n\tat io.fabric8.kubernetes.client.utils.serialization.SettableBeanPropertyDelegate.deserializeAndSet(SettableBeanPropertyDelegate.java:131)\n\tat com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:324)\n\tat com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:187)\n\tat com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:129)\n\tat io.fabric8.kubernetes.client.utils.serialization.SettableBeanPropertyDelegate.deserializeAndSet(SettableBeanPropertyDelegate.java:131)\n\tat com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:324)\n\tat com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:187)\n\tat com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:322)\n\tat com.fasterxml.jackson.databind.ObjectMapper._readValue(ObjectMapper.java:4569)\n\tat com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2798)\n\tat com.fasterxml.jackson.databind.ObjectMapper.treeToValue(ObjectMapper.java:3261)\n\tat io.fabric8.kubernetes.internal.KubernetesDeserializer.fromObjectNode(KubernetesDeserializer.java:99)\n\tat io.fabric8.kubernetes.internal.KubernetesDeserializer.deserialize(KubernetesDeserializer.java:63)\n\tat io.fabric8.kubernetes.internal.KubernetesDeserializer.deserialize(KubernetesDeserializer.java:45)\n\tat com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:322)\n\tat com.fasterxml.jackson.databind.ObjectReader._bindAndClose(ObjectReader.java:2033)\n\tat com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:1491)\n\tat io.fabric8.kubernetes.client.utils.Serialization.unmarshalJsonStr(Serialization.java:383)\n\tat io.fabric8.kubernetes.client.utils.Serialization.unmarshalYaml(Serialization.java:376)\n\tat io.fabric8.kubernetes.client.utils.Serialization.unmarshal(Serialization.java:196)\n\t... 140 more\n"}

Expected behavior

success

Runtime

Kubernetes (vanilla)

Kubernetes API Server version

1.22.3@latest

Environment

Linux

Fabric8 Kubernetes Client Logs

No response

Additional context

No response

@shawkins
Copy link
Contributor

shawkins commented Jul 6, 2022

It looks like Jackson has known issues when dealing with unwrapped polymorphic deserialization. If port or derivedPort is included it does appropriately deduce the type, but when missing you get an exception. For it to be optional it looks like we need another jackson setting in Serialization.java:

JSON_MAPPER.disable(DeserializationFeature.FAIL_ON_INVALID_SUBTYPE);

@manusa @rohanKanojia any qualms with adding that?

shawkins added a commit to shawkins/kubernetes-client that referenced this issue Jul 7, 2022
shawkins added a commit to shawkins/kubernetes-client that referenced this issue Jul 7, 2022
@shawkins shawkins self-assigned this Jul 7, 2022
@manusa manusa added this to the 6.1.0 milestone Jul 11, 2022
manusa pushed a commit to shawkins/kubernetes-client that referenced this issue Jul 22, 2022
@manusa manusa closed this as completed in 28979b1 Jul 22, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants