Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring integration ZipTransformer压缩文件列表_Spring Integration - Fatal编程技术网

Spring integration ZipTransformer压缩文件列表

Spring integration ZipTransformer压缩文件列表,spring-integration,Spring Integration,我的目标是创建多个zip文件,每个文件包含一定数量的条目。我正在使用聚合器对文件进行分组,然后再进行转换 是否可以使用ZipTransformer压缩消息 编辑: 在将ZipConverter声明为bean时,我遇到了循环依赖项异常。什么是解决方案 编辑2通过从@Transformer中删除@Bean注释,并向zipTransformer.setBeanFactory(appContext)提供当前应用程序上下文,解决了循环依赖性问题根据ZipTransformer源代码,这正是您必须执行的操作

我的目标是创建多个zip文件,每个文件包含一定数量的条目。我正在使用
聚合器
对文件进行分组,然后再进行转换

是否可以使用
ZipTransformer
压缩
消息

编辑: 在将ZipConverter声明为bean时,我遇到了循环依赖项异常。什么是解决方案


编辑2通过从
@Transformer
中删除
@Bean
注释,并向
zipTransformer.setBeanFactory(appContext)提供当前应用程序上下文,解决了循环依赖性问题

根据
ZipTransformer
源代码,这正是您必须执行的操作-使用
列表发送消息

受保护对象doZipTransform(消息)引发异常{
...
if(可编辑的有效负载实例){
...
对于(对象项:(Iterable)有效载荷){
final ZipEntrySource ZipEntrySource=createZipEntrySource(项,lastModifiedDate,baseName+“382;”
+计数器+文件扩展名,this.useFileAttributes);
...
}
}
...
私有ZipEntrySource createZipEntrySource(对象项,
日期lastModifiedDate、字符串zipEntryName、布尔值useFileAttributes){
如果(文件的项目实例){
最终文件filePayload=(文件)项;
最终字符串文件名=useFileAttributes?filePayload.getName():zipEntryName;
if(((文件)项).isDirectory()){
抛出新的UnsupportedOperationException(“不支持目录压缩”);
}
返回新文件源(文件名、文件负载);
}

项目中有一个测试类来确认:

我看到
zipttransformer.setBeanFactory()
是一个必需的调用。它的参数应该是什么?由Spring依赖项注入容器自动调用。只需将其声明为bean即可。有关Spring容器的更多信息,请参阅参考手册:
protected Object doZipTransform(Message<?> message) throws Exception {
   ...
   if (payload instanceof Iterable<?>) {
        ...

        for (Object item : (Iterable<?>) payload) {

            final ZipEntrySource zipEntrySource = createZipEntrySource(item, lastModifiedDate, baseName + "_"
                    + counter + fileExtension, this.useFileAttributes);
            ...
        }
   }

...
private ZipEntrySource createZipEntrySource(Object item,
        Date lastModifiedDate, String zipEntryName, boolean useFileAttributes) {

    if (item instanceof File) {
        final File filePayload = (File) item;

        final String fileName = useFileAttributes ? filePayload.getName() : zipEntryName;

        if (((File) item).isDirectory()) {
            throw new UnsupportedOperationException("Zipping of directories is not supported.");
        }

        return new FileSource(fileName, filePayload);

}