Apache Karavan中XML/JSON反序列化为Java类的问题求助
问题解决步骤
核心错误分析
- 反序列化组件与数据格式不匹配:你用了
json反序列化组件,但setBody里的内容是XML格式,两者完全不兼容。 - 类路径不完整:
unmarshalType只写了User,Camel无法识别完整类路径,必须指定全限定类名。 - 缺少无参构造函数: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
相关产品推荐
相关产品推荐

