gpt4 book ai didi

java - 如何在camel路线构建器中分割对象

转载 作者:行者123 更新时间:2023-12-02 05:48:16 25 4
gpt4 key购买 nike

您好,我对 Java、camel 等还很陌生。这是我的问题:

我有代码将包含订单项和 xml 格式的其他一些信息的订单从一个 Camel 处理器传递到另一个。然后,这个特定的处理器将订单拆分并创建多个订单,然后将它们作为单独的消息全部传递到下一个端点。

目前,该处理器使用 ProducerTemplate 来显式完成此任务。我想将此行为移至 RouteBuilder 本身,而不是使用 ProducerTemplate。我已经研究过 Splitter 和 MessageTranslator,但我认为我还没有掌握所有部分。

所以基本上我想使用 Splitter 在 RouteBuilder 中拆分消息,但我想提供自定义代码来获取消息,然后将其反序列化为 Order 对象,然后创建多个 Order 对象,然后将它们全部发送为将消息单独发送到下一个端点。我该如何实现这个目标?

例如我希望能够做类似的事情

from("startPoint").split(MyCustomStrategy).to("endPoint")

//where MyCustomStrategy will take the message,
//and split it up and pass all the newly created messages to endPoint.

最佳答案

您可以在 route 使用一个 bean 或处理器来创建 Order对象并将它们作为集合返回(例如 List<Order> 或类似的)。然后可以使用分离器 EIP 来处理每个 Order在该系列中,一次一个,例如将每个订单传递到处理单个订单的另一个处理器/bean,可能根据需要继续到另一个端点,等等。

// Pseudocode:
from(input).
to(bean-which-returns-a-collection-of-orders).
split(on-the-body).
to(bean-which-processes-a-single-order).
to(anywhere-else-needed-for-your-purposes).
// etc...

或者类似的东西;抱歉,我使用 Spring DSL 而不是 Java DSL,但 Camel 文档显示了两者。下面是一些实际的 spring DSL 代码,其中集合被拆分以处理集合中的每个项目:

        <split>
<simple>${body}</simple>
<doTry>
<log message="A.a1 -- splitting batches for transfer" loggingLevel="DEBUG" />
<setHeader headerName="currentBatchNumber">
<simple>${body.batchNumber}</simple>
</setHeader>
<setHeader headerName="CamelFileName">
<simple>${body.batchNumber}.xml</simple>
</setHeader>
<log message="A.a2 -- marshalling a single batch to XML" loggingLevel="DEBUG" />
<marshal>
<jaxb prettyPrint="true" contextPath="generated.gov.nmcourts.ecitation"
partClass="generated.gov.nmcourts.ecitation.NMCitationEFileBatch"
partNamespace="EFileBatch" />
</marshal>

<log message="A.a3 -- xslt transform to add schema location" loggingLevel="DEBUG" />
<to uri="{{addSchemaLocationXsltUri}}"/>

<log message="A.a4 -- ftp now initiating" loggingLevel="DEBUG" />
<log message="ftping $simple{in.header.CamelFileName}" loggingLevel="DEBUG"/>

<bean ref="markFtpStatusOnTickets"/>
<to uri="{{ftpOdysseyInputPath}}"/>
<log message="A.a5 -- ftp now complete" loggingLevel="DEBUG" />
<doCatch>
<exception>java.lang.Exception</exception>
<handled>
<constant>true</constant>
</handled>
<bean ref="ticketExceptionHandler" method="handleException"/>
</doCatch>
</doTry>
</split>

关于java - 如何在camel路线构建器中分割对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23836705/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com