【问题标题】:Spring integration Unzip transformer throws ReplyRequiredException exceptionSpring集成Unzip转换器抛出ReplyRequiredException异常
【发布时间】:2018-10-26 22:59:05
【问题描述】:

我们想使用Spring Integration 解压一个字节数组,并且在使用 unzip-transformer 时遇到以下异常:

org.springframework.integration.handler.ReplyRequiredException: 处理程序 'org.springframework.integration.handler.MessageHandlerChain#1$child#1' 没有产生回复,并且它的 'requiresReply' 属性设置为 true.,failedMessage =GenericMessage [有效负载=字节[327] ...

这是我们尝试使用的 .xml blob:

int-zip:unzip-transformer result-type="BYTE_ARRAY" expect-single-result="true"/>

使用 service-activator 的等效 java 代码可以很好地解压:

ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
GZIPInputStream gzipInputStream;
gzipInputStream = new GZIPInputStream(new ByteArrayInputStream((byte[]) 
message.getPayload()));
IOUtils.copy(gzipInputStream, byteArrayOutputStream);
byteArrayOutputStream.close();
return new String(byteArrayOutputStream.toByteArray(), Charsets.UTF_8);

有没有办法使用 unzip-transformer 来做同样的代码?

【问题讨论】:

标签: java spring-integration compression gzipinputstream


【解决方案1】:

GZIPInputStream ... Spring Integration ZIP 不支持 GZIP,仅支持带有条目的常规 ZIP。这就是您获得该异常的方式:

 if (uncompressedData.isEmpty()) {
                if (logger.isWarnEnabled()) {
                    logger.warn("No data unzipped from payload with message Id " + message.getHeaders().getId());
                }
                unzippedData = null;
            }

仅仅因为 ZipUtil.iterate(InputStream is, ZipEntryCallback action) 没有任何东西可以迭代 GZIP 有效负载。

【讨论】:

  • 嗨,Artem,您对解决此问题有什么想法吗?您会说使用 Spring 集成处理此问题的最佳做法是使用 service-activator 和上面提到的 java 代码,还是有更好的方法?您是否还预见到未来版本的 spring 中将实现 gzip 功能?
  • 是的,自定义代码的服务激活器是目前的解决方案。我认为我们在那里有一个开放的 gzip 支持问题,但是当我们回来修复时没有计划。欢迎投稿!
  • 能否分享一下问题链接?我很乐意为修复做出贡献。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-03
  • 1970-01-01
  • 2016-07-11
  • 2011-01-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多