Camel 4.0.0中toD(query_jpa)插入XML时+号丢失如何解决?
Camel 4.0.0 插入XML内容时保留"+"号的解决方法
问题根源
toD组件的URI编码机制会将+号解析为空格(符合HTTP URI编码规则),即使使用RAW(${header.xmlResponse}),也可能因为SQL拼接时的二次处理导致问题,同时直接拼接SQL还存在SQL注入风险。
解决方案
1. 使用JPA命名参数绑定(推荐)
避免直接在toD的URI中拼接XML内容,改用JPA的命名参数传递值,这样参数不会被URI编码处理,能完整保留原始内容。
示例路由代码:
from("direct:insertXml") .setHeader("xVal", constant("x")) .setHeader("yVal", constant("y")) .setHeader("xmlContent", simple("${header.xmlResponse}")) .toD("jpa:com.example.YourEntity?query=INSERT INTO xxxx (x,y,z) VALUES (:xVal, :yVal, :xmlContent)");
2. 确保实体类字段类型正确
检查对应数据库表的实体类,确保存储XML的字段定义为String类型,避免JPA provider对字符串做额外转义处理:
@Entity @Table(name = "xxxx") public class YourEntity { // 其他字段 @Column(name = "z", columnDefinition = "TEXT") private String xmlContent; // getter/setter }
3. 禁用toD的自动编码(备选)
如果必须在URI中拼接内容,可以通过toD的encode参数禁用自动编码,但此方式仍存在SQL注入风险,需谨慎使用:
.toD("jpa:com.example.YourEntity?query=INSERT INTO xxxx SET x='x', y='y', z='${header.xmlResponse}'&encode=false")
内容的提问来源于stack exchange,提问作者Martel
相关产品推荐
相关产品推荐

