Apache Camel gzipDeflater编解码报错:依赖不符问题排查
Apache Camel gzipDeflater解压报错解决
问题详情
需通过Apache Camel解压gzip格式消息体,根据官方文档说明仅依赖camel-core即可,但运行代码时触发如下错误:
Data format 'gzipDeflater' could not be created. Ensure that the data format is valid and the associated Camel component is present on the classpath
运行代码
public static void main(final String[] args) throws Exception { try (final CamelContext context = new DefaultCamelContext()) { context.addRoutes(new RouteBuilder() { @Override public void configure() { this.from("direct:test").unmarshal().gzipDeflater().to("seda:test2"); } }); context.start(); context.createProducerTemplate().sendBody("direct:test", "this is not gzip but it does not matter."); Thread.currentThread().join(); } }
完整错误栈
Caused by: java.lang.IllegalArgumentException: Data format 'gzipDeflater' could not be created. Ensure that the data format is valid and the associated Camel component is present on the classpath at org.apache.camel.reifier.dataformat.DataFormatReifier.createDataFormat(DataFormatReifier.java:279) at org.apache.camel.reifier.dataformat.DataFormatReifier.getDataFormat(DataFormatReifier.java:152) at org.apache.camel.reifier.dataformat.DataFormatReifier.getDataFormat(DataFormatReifier.java:112) at org.apache.camel.reifier.UnmarshalReifier.createProcessor(UnmarshalReifier.java:35) at org.apache.camel.reifier.ProcessorReifier.makeProcessor(ProcessorReifier.java:870) at org.apache.camel.reifier.ProcessorReifier.addRoutes(ProcessorReifier.java:610) at org.apache.camel.reifier.RouteReifier.doCreateRoute(RouteReifier.java:213) ... 11 more
解决办法
版本匹配检查:官方文档针对Camel 4.0.x版本,若使用3.x及以下版本,
gzipDeflater不在camel-core中,需额外引入camel-gzip-deflater依赖。以Maven为例:<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-gzip-deflater</artifactId> <version>你的Camel版本号</version> </dependency>依赖范围校验:确保
camel-core依赖为compile范围,避免被设置为provided等导致运行时缺失的配置。代码显式实例化:绕过自动查找逻辑,直接创建
GzipDeflaterDataFormat实例使用:import org.apache.camel.dataformat.gzip.GzipDeflaterDataFormat; // 在RouteBuilder的configure方法中修改 @Override public void configure() { GzipDeflaterDataFormat gzipFormat = new GzipDeflaterDataFormat(); from("direct:test").unmarshal(gzipFormat).to("seda:test2"); }
内容的提问来源于stack exchange,提问作者Amen
相关产品推荐
相关产品推荐

