当前位置: 首页 > 知识库问答 >
问题:

使用Spring集成读取/写入XML文件

冷翼
2023-03-14

我目前正在使用Spring集成实现一些导入/导出机制,总的来说进展很顺利,但在功能方面似乎存在差距,我不了解:

有Spring集成文件轮询目录,写入文件,...我可以用它来轮询一个目录,并获得一个消息

Spring集成XML用于处理文档对象、应用XPath、XSLT等等。。。我可以使用它来分析XML文档、使用XPath丰富标题、拆分文档等等。。。

我缺少的是两者之间的联系:

  • 给定一个XML文件将被放入的目录,我想要一个包含消息的通道

封送器/反封送器似乎正是我要找的(或者至少让我达到字节[]的一半),但是它们似乎只能通过一些映射框架将文档转换为POJO。

对于解析,我可以使用以下简单类:

public class FileToDocumentTransformer extends AbstractFilePayloadTransformer<Document> {
    @Override
    protected Document transformFile(File file) throws Exception {
        return DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(file);
    }
}

但我还没有找到一个合适的对策,我不能相信Spring集成还没有内置这种微不足道的功能。

我错过了什么?


共有2个答案

卓星波
2023-03-14

我最后写了这节课:

public class DocumentToBytesTransformer {
    public byte[] transform(Document document) throws Exception {
        Transformer tr = TransformerFactory.newInstance().newTransformer();
        tr.setOutputProperty(OutputKeys.INDENT, "yes");
        tr.setOutputProperty(OutputKeys.METHOD, "xml");
        tr.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
        tr.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");
        final ByteArrayOutputStream baos = new ByteArrayOutputStream();
        tr.transform(new DOMSource(document), new StreamResult(baos));
        return baos.toByteArray();
    }
}

使用此配置:

<int:service-activator method="transform">
    <bean class="package.DocumentToBytesTransformer"/>
</int:service-activator>

对我来说这是在一个

我很确定这不是最好的解决方案(这就是为什么我一开始就问这个问题),但它对我来说是有效的。

方飞鸣
2023-03-14
匿名用户

请参见DefaultXmlPayloadConverter.convertTo文档。此转换器在许多endpoint(特别是XPath,但其他endpoint也是)内部使用。它可以处理文件和字符串有效载荷。您也可以直接作为变压器调用它。

有关更多信息,请参阅spring integration xml项目中的transformer包。

 类似资料:
  • 我们需要解析大量传入文件(到一个目录中),并对其进行处理,然后将结果放入每个文件的AWS动画中。 文件的频率为每天60000次,文件每15秒到达一次。每个文件可能包含大约1000个条目。 > spring集成能否处理此负载? 处理此类卷会有任何问题吗? 当文件进入入站通道适配器时,我们可以为每个文件执行服务激活器吗? 我认为我们需要在poller的频道上使用任务执行器?有什么例子吗? 任务执行者是

  • 我想配置一个带有JavaDSL的网关,以递归方式从FTP服务器读取所有文件,因为它们位于不同的文件夹中。 我怎么做?请给我一个特别的代码示例

  • 我正在尝试使用spring集成逐行读取远程文件。使用这里找到的spring文档,我已经设置了我的项目来轮询文件,并在找到文件时通过sftp传输它。我一直在思考如何一行一行地读取文件内容。 这是我的入站通道适配器设置,当前用于拉入文件。 编辑:为了澄清,我想一次从远程文件中检索一行,然后处理该行的内容,然后检索下一行。类似于为本地文件创建java.io.inputstream并逐行读取。 非常感谢您

  • 问题内容: 如何使用框架有效地从大文件读取并将大数据写入文件。 我工作,并和曾尝试类似如下: 谁能告诉我,如果我的文件大小超过2 GB,我应该遵循相同的步骤吗? 如果大量的书面操作,我想在写作时做类似的事情,该怎么办? 问题答案: 请注意,您可以像示例代码那样简单地用于复制文件,只是速度更快,而且仅一行代码。 否则,如果您已经打开了两个文件通道,则可以使用 将该通道的全部内容传输到该通道。请注意,

  • 下面是以下代码,它使用BufferedImage读取RGB值,然后简单地将它们再次写回文件。生成的图像是完美的,看起来很好。不用担心。 我运行了一个打印测试,打印出前10个RBG int值。这是为了测试“test.png”文件,然后测试结果图像——“new-test . png”。出于某种原因,我得到了不同的RBG值之间的两个文件。 例如(前3个RGB int值) test.png:-167042

  • 本文向大家介绍C#操作读取、写入XML文档的实用方法,包括了C#操作读取、写入XML文档的实用方法的使用技巧和注意事项,需要的朋友参考一下 本文给大家分享一下C#操作(读取、写入)XML文档的实用方法,这种方法主要是对比较规范的XML文档进行操作,因为它(XML文档)和类对象是严格对应的,否则在反序列或序列化的时候会出现错误。其他的不用多说,直接看示例代码吧: 运行结果如图: 生成的XML文档如下