このバージョンはまだ開発中であり、まだ安定しているとは見なされていません。最新の安定バージョンについては、Spring Integration 6.5.3 を使用してください! |
XML メッセージの分割
XPathMessageSplitter は、String または Document ペイロードのいずれかを持つメッセージをサポートします。スプリッターは、提供された XPath 式を使用して、ペイロードを複数のノードに分割します。デフォルトでは、これにより各 Node インスタンスが新しいメッセージのペイロードになります。各メッセージが Document である必要がある場合、createDocuments フラグを設定できます。String ペイロードが渡される場合、ペイロードは変換されてから分割されてから、多くの String メッセージに変換されます。XPath スプリッターは MessageHandler を実装するため、適切なエンドポイントと組み合わせて構成する必要があります(より単純な構成の代替方法については、以下の例の後の名前空間サポートの例を参照してください)。次の例では、XPathMessageSplitter を使用する Bean を構成します。
<bean id="splittingEndpoint"
class="org.springframework.integration.endpoint.EventDrivenConsumer">
<constructor-arg ref="orderChannel" />
<constructor-arg>
<bean class="org.springframework.integration.xml.splitter.XPathMessageSplitter">
<constructor-arg value="/order/items" />
<property name="documentBuilder" ref="customisedDocumentBuilder" />
<property name="outputChannel" ref="orderItemsChannel" />
</bean>
</constructor-arg>
</bean>XPath スプリッタ名前空間のサポートにより、次の例に示すように、入力チャネルと出力チャネルを持つメッセージエンドポイントを作成できます。
<!-- Split the order into items and create a new message for each item node -->
<int-xml:xpath-splitter id="orderItemSplitter"
input-channel="orderChannel"
output-channel="orderItemsChannel">
<int-xml:xpath-expression expression="/order/items"/>
</int-xml:xpath-splitter>
<!-- Split the order into items, create a new document for each item-->
<int-xml:xpath-splitter id="orderItemDocumentSplitter"
input-channel="orderChannel"
output-channel="orderItemsChannel"
create-documents="true">
<int-xml:xpath-expression expression="/order/items"/>
<int:poller fixed-rate="2000"/>
</int-xml:xpath-splitter> バージョン 4.2 以降、XPathMessageSplitter は、リクエスト payload が型 org.w3c.dom.Node でない場合、javax.xml.transform.Transformer インスタンスの outputProperties (OutputKeys.OMIT_XML_DECLARATION など)プロパティを公開します。次の例では、プロパティを定義し、output-properties プロパティで使用します。
<util:properties id="outputProperties">
<beans:prop key="#{T (javax.xml.transform.OutputKeys).OMIT_XML_DECLARATION}">yes</beans:prop>
</util:properties>
<xpath-splitter input-channel="input"
output-properties="outputProperties">
<xpath-expression expression="/orders/order"/>
</xpath-splitter>version 4.2 から、XPathMessageSplitter は iterator オプションを boolean フラグとして公開します(デフォルトは true)。これにより、ダウンストリームフローのスプリットノードの「ストリーミング」が可能になります。iterator モードを true に設定すると、各ノードは反復中に変換されます。false の場合、スプリットノードが出力チャネルに送信される前に、すべてのエントリが最初に変換されます。(違いは、「変換、送信、変換、送信」対「変換、変換、送信、送信」と考えることができます)詳細については、スプリッターを参照してください。