You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apache Karavan中XML/JSON反序列化为Java类的问题求助

问题解决步骤

核心错误分析

  1. 反序列化组件与数据格式不匹配:你用了json反序列化组件,但setBody里的内容是XML格式,两者完全不兼容。
  2. 类路径不完整:unmarshalType只写了User,Camel无法识别完整类路径,必须指定全限定类名。
  3. 缺少无参构造函数:Camel的反序列化器(无论XML还是JSON)都需要类提供无参构造来实例化对象,你的User类目前只有带参构造。

步骤1:修改User类,添加无参构造

package com.dhls.camel;

public class User {
    private String name;
    private String surname;

    // 新增无参构造函数,反序列化必须依赖它
    public User() {}

    public User(String name, String surname) {
        this.name = name;
        this.surname = surname;
    }

    // getter和setter方法保持不变
    public String getSurname() {
        return surname;
    }

    public void setSurname(String surname) {
        this.surname = surname;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

步骤2:修正YAML路由配置

因为数据是XML格式,改用Camel自带的jaxb反序列化组件,并指定类所在的包路径:

- route:
    id: route-6819
    from:
      uri: timer:timer
      id: from-ee72
      steps:
        - setBody:
            id: setBody-5057
            expression:
              simple:
                expression: |-
                  <user>
                    <name>John</name>
                    <surname>Smith</surname>
                  </user>
                id: simple-e9cc
        - unmarshal:
            id: unmarshal-a939
            jaxb:
              id: jaxb-9671
              contextPath: com.dhls.camel # 指定User类所在的包
        # 示例:反序列化后直接使用User对象
        - log:
            id: log-user-details
            message: "用户姓名:${body.name},姓氏:${body.surname}"

后续使用User对象的方式

反序列化完成后,${body}会自动转为User类的实例,你可以在后续组件中直接操作:

  • 在表达式中用${body.name}、${body.surname}直接获取属性值
  • 在bean组件中调用User类的方法
  • 将${body}直接传递给需要User类型参数的其他组件

内容的提问来源于stack exchange,提问作者Poww

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 23:25:21