如何使用spring集成元素将属性值从Properties文件移动到payload对象

时间:2014-09-26 14:53:52

标签: spring spring-integration

Sample.properties
=================
http.header.amisys.accept.value=arun/vnd.dsths.services-v1+xml

1)Above XSL automatically loaded when my server starts.
2)I have tried <int:enricher>  element but it is not helped me.

示例代码:下面是我尝试的一些代码,任何人都可以就此提出建议。

    <int:channel id="PQLegacySecurity-InputChannel" />
    <int:chain input-channel="PQLegacySecurity-InputChannel" >
        <!-- Split the Search Request Params from Xml  -->
        <int-xml:xpath-splitter>
        <int-xml:xpath-expression expression="//LegacySecurity"  namespace map="xmlMessageNamespace" />
        </int-xml:xpath-splitter>           
        <int:enricher  >               
          <int:payload name="testPayload" expression="${http.header.amisys.accept.value}"/>                  
        </int:enricher>         
    </int:chain>        

Actual Payload Object:Below is the xml which does not contain  testPayload property.

    <?xml version="1.0" encoding="UTF-8"?><LegacySecurity>
                  <businessArea>%%%%%%</businessArea>
                  <LegacySystem>%%%%%</LegacySystem>
                  <LegacyUserID>%%%%%</LegacyUserID>
                  <LegacyPassword>%%%%%</LegacyPassword>
                  <OtherLogin/>
                  <OtherPassword/>
                  <AddSecurLogin/>
                  <AddSecurPassword/>
                  </LegacySecurity>

预期的有效载荷对象:对象下面包含我应该添加的新元素testPayload节点

                 <?xml version="1.0" encoding="UTF-8"?><LegacySecurity>
                  <businessArea>%%%%%%</businessArea>
                  <LegacySystem>%%%%%</LegacySystem>
                  <LegacyUserID>%%%%%</LegacyUserID>
                  <LegacyPassword>%%%%%</LegacyPassword>
                  <OtherLogin/>
                  <OtherPassword/>
                  **<testPayload>arun/vnd.dsths.services-v1+xml</testPayload>**
                  <AddSecurLogin/>
                  <AddSecurPassword/>
                  </LegacySecurity>

1 个答案:

答案 0 :(得分:1)

您可以使用xslt转换器。类似下面的内容,尽管您需要从spring文档中找出正确使用变压器的方法。

请注意,您可以将参数传递给XSLT

<int-xml:xslt-transformer result-transformer="toDocumentTransformer" result-type="StringResult" xsl-resource="/xslt/addTestPayload.xslt">
     <int-xml:xslt-param name="testPayload" value="${http.header.amisys.accept.value}"/>
</int-xml:xslt-transformer>

在XSLT文件中,使用它来获取参数:

<xsl:param name="testPayload" /> 

如果您需要对邮件进行其他更改,则可以使用相同的xslt。