私はメッセージ処理のフォローチェーンを持っています。 originalFileName
とoriginalFile
: 春の統合。スプリッタを介していくつかのヘッダーを伝播する
<int:header-enricher input-channel="acceptFileChannel" output-channel="validateMessageChannel">
<int:error-channel ref="validateSplitTransformErrorChannel"/>
<int:header name="originalFileName" expression="payload.getName()"/>
<int:header name="originalFile" expression="payload"/>
</int:header-enricher>
<int:service-activator input-channel="validateMessageChannel" output-channel="splitMessageChannel">
<bean class="com.my.usual.ValidationService">
<property name="schemaResource" value="classpath:/META-INF/xsd/locals_final_version.xsd"/>
</bean>
</int:service-activator>
<int:splitter id="staxXmlSplitter" input-channel="splitMessageChannel"
output-channel="payloadTypeRoutingChannel">
<bean class="com.my.usual.XMLSplitter"/>
</int:splitter>
<int:payload-type-router input-channel="payloadTypeRoutingChannel">
<int:mapping type="org.w3c.dom.Node" channel="afterSplitChannel"/>
<int:mapping type="com.my.usual.SequenceSizeMessage" channel="barrier"/>
</int:payload-type-router>
<int:channel id="afterSplitChannel">
<int:dispatcher task-executor="taskExecutor"/>
</int:channel>
<si-xml:xpath-router id="afterSplitRouter" input-channel="afterSplitChannel" evaluate-as-string="true">
<si-xml:xpath-expression expression="local-name(/Act | /Partner)"/>
<si-xml:mapping value="Act" channel="transformActChannel"/>
<!--todo: for example of extending-->
<si-xml:mapping value="Partner" channel="nullChannel"/>
</si-xml:xpath-router>
このチェーンでは、私は2つのメッセージヘッダーを設定しました。 com.my.usual.XMLSplitter
でメッセージを分割した後にヘッダーを保持するのが最も簡単な方法のようです。
@Override
protected boolean shouldCopyRequestHeaders() {
return true;
}
分割されたメッセージに1つのヘッダーが必要な場合はどうすればよいですか?私はどうにかしてoriginalFileName
という値を読んで、分割された各メッセージに書きます。
スプリッターのwillAddHeaders
とaddHeaders
の方法でヘッダーを書くことができると思います。しかし、スプリッタビーンのスコープについてはわかりません。だからもしそれがシングルトンであり、同意しているのであれば、元のヘッダを保持する方法は?
誰かが良い解決策を見つけるのを手助けできますか?
ご回答ありがとうございます。
はい。私は本当です。すべてのヘッダーがコピーされました。問題は別の場所にあった。私は変圧器のパラメータを記述することを忘れています。ご回答有難うございます。 – gooamoko