【问题标题】:Cannot deserialize value of type when getting CertificateRequest获取 CertificateRequest 时无法反序列化类型的值
【发布时间】:2021-10-26 04:24:05
【问题描述】:

我正在处理fabric8 CertificateRequest,我按照https://github.com/rohankanojia-forks/cert-manager-java-extension-demo/blob/main/src/main/java/io/fabric8/demo/CertificateRequestGet.java 尝试获取现有的CertificateRequest,但出现以下错误。

我的测试环境:

  • Kubernetes 集群:OpenShift 4.7.32
  • 我的应用环境:Java 11
java version "11.0.12" 2021-07-20
IBM Semeru Runtime Certified Edition 11.0.12.0 (build 11.0.12+7)
Eclipse OpenJ9 VM 11.0.12.0 (build openj9-0.27.0, JRE 11 Mac OS X amd64-64-Bit Compressed References 20210901_134 (JIT enabled, AOT enabled)
OpenJ9   - 1851b0074
OMR      - 9db1c870d
JCL      - 54d2067eec based on jdk-11.0.12+7)

certmanager-client 版本

    <dependency>
      <groupId>io.fabric8</groupId>
      <artifactId>certmanager-client</artifactId>
      <version>5.9.0</version>
    </dependency>

源代码

        try (CertManagerClient certManagerClient = new DefaultCertManagerClient()) {
            CertificateRequest certificateRequest = certManagerClient.v1()
                .certificateRequests()
                .inNamespace("default")
                .withName("aaaaa")
                .get();

            System.out.println(String.format("%s found in default namespace", certificateRequest.getMetadata().getName()));

            System.out.println(SerializationUtils.dumpAsYaml(certificateRequest));

        } catch (Exception e) {
            e.printStackTrace();
        }

错误:

io.fabric8.kubernetes.client.KubernetesClientException: An error has occurred.
    at io.fabric8.kubernetes.client.KubernetesClientException.launderThrowable(KubernetesClientException.java:103)
    at io.fabric8.kubernetes.client.KubernetesClientException.launderThrowable(KubernetesClientException.java:97)
    at io.fabric8.kubernetes.client.utils.Serialization.unmarshal(Serialization.java:263)
    at io.fabric8.kubernetes.client.utils.Serialization.unmarshal(Serialization.java:215)
    at io.fabric8.kubernetes.client.dsl.base.OperationSupport.handleResponse(OperationSupport.java:569)
    at io.fabric8.kubernetes.client.dsl.base.OperationSupport.handleResponse(OperationSupport.java:527)
    at io.fabric8.kubernetes.client.dsl.base.OperationSupport.handleGet(OperationSupport.java:494)
    at io.fabric8.kubernetes.client.dsl.base.OperationSupport.handleGet(OperationSupport.java:476)
    at io.fabric8.kubernetes.client.dsl.base.BaseOperation.handleGet(BaseOperation.java:788)
    at io.fabric8.kubernetes.client.dsl.base.BaseOperation.getMandatory(BaseOperation.java:187)
    at io.fabric8.kubernetes.client.dsl.base.BaseOperation.get(BaseOperation.java:154)
    at io.fabric8.kubernetes.client.dsl.base.BaseOperation.get(BaseOperation.java:87)
    at com.ibm.si.osprey.App.main(App.java:66)
Caused by: com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize value of type `java.util.ArrayList<java.lang.Integer>` from String value (token `JsonToken.VALUE_STRING`)
 at [Source: (BufferedInputStream); line: 1, column: 2603] (through reference chain: io.fabric8.certmanager.api.model.v1.CertificateRequest["status"]->io.fabric8.certmanager.api.model.v1.CertificateRequestStatus["ca"])
    at com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:59)
    at com.fasterxml.jackson.databind.DeserializationContext.reportInputMismatch(DeserializationContext.java:1741)
    at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1515)
    at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1462)
    at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.handleNonArray(CollectionDeserializer.java:392)
    at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer._deserializeFromString(CollectionDeserializer.java:326)
    at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:250)
    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 com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:313)
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:176)
    at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:129)
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:313)
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:176)
    at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:322)
    at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4675)
    at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3675)
    at io.fabric8.kubernetes.client.utils.Serialization.unmarshal(Serialization.java:261)
    ... 10 more

【问题讨论】:

  • 看来问题是由反序列化 CertificateRequest 状态引起的。
  • 我只在github.com/fabric8io/kubernetes-client/tree/master/extensions/… 中看到了CertificateRequestSpec 的实现,但没有看到CertificateRequestStatus 的实现。
  • 能否以 YAML 格式分享您的 CertificateRequest 以便我们重现?
  • 嗨 Rohan Kumar,请查看底部的 yaml 文件
  • 您能在 Fabric8 Repository 上提交问题吗?看起来这是一个错误。

标签: fabric8


【解决方案1】:

这是我们的输出 yaml 文件,供您请求。

apiVersion: cert-manager.io/v1
kind: CertificateRequest
metadata:
  name: barrycertificaterequest
  namespace: barry
spec:
  duration: 2160h0m0s
  issuerRef:
    group: cert-manager.io
    kind: Issuer
    name: barry-dlc-cert-issuer
  request: >-<here is your csr>
status:
  ca: >-<here is returned ca>
  certificate: >-<here is returned certificate>
  conditions:
    - lastTransitionTime: '2021-10-25T20:13:03Z'
      message: Certificate request has been approved by cert-manager.io
      reason: cert-manager.io
      status: 'True'
      type: Approved
    - lastTransitionTime: '2021-10-25T20:13:04Z'
      message: Certificate fetched from issuer successfully
      reason: Issued
      status: 'True'
      type: Ready

【讨论】:

  • 您好,我可以重现此错误。这看起来像是 Fabric8 CertManager 模型中的一个错误。在 CertificateRequestStatus 中,caList&lt;Integer&gt;,但在 go struct 中是 [] byte。我认为它应该是java类中的String类型
猜你喜欢
  • 2023-01-25
  • 1970-01-01
  • 1970-01-01
  • 2017-09-06
  • 2017-10-19
  • 1970-01-01
  • 1970-01-01
  • 2020-06-18
  • 1970-01-01
相关资源
最近更新 更多