2016-09-19 12 views
0

XML 페이로드를 CSV 메시지로 변환하는 데 필요한 간단한 프록시 서비스가 있습니다. 이 목적을 위해 나는 smooks 중재자를 사용하고 있습니다. 다음은 나의 프록시 서비스입니다.WSO2 ESB Smooks - XML을 CSV로 변환

<?xml version="1.0" encoding="UTF-8"?> 
<proxy name="TestProxy" startOnLoad="true" trace="disable" 
    transports="http https" xmlns="http://ws.apache.org/ns/synapse"> 
    <target> 
    <inSequence> 
     <log level="custom"> 
     <property name="STATUS" value="TESTING PROXY SERVICE"/> 
     </log> 
     <payloadFactory media-type="xml"> 
     <format> 
       <csv-set> 
       <csv-record number="2"> 
        <Name>Jhone</Name> 
        <City>Colombo</City> 
        <Age>32</Age> 
       </csv-record> 
       <csv-record number="3"> 
        <Name>Doe</Name> 
        <City>Jaffna</City> 
        <Age>32</Age> 
       </csv-record> 
       </csv-set>    
     </format> 
     <args/> 
     </payloadFactory> 
     <log level="full"/> 
     <smooks config-key="gov:Test/smooks/TestSmooksConfig.xml"> 
     <input type="xml"/> 
     <output type="text"/> 
     </smooks> 
     <log level="custom"> 
     <property name="STATUS" value="PROCESSED MSG******"/> 
     </log> 
     <log level="full"/> 
    </inSequence> 
    <outSequence/> 
    <faultSequence/> 
    </target> 
</proxy> 

다음은 내 Smooks 구성입니다.

<?xml version="1.0" encoding="UTF-8"?><smooks-resource-list xmlns="http://www.milyn.org/xsd/smooks-1.1.xsd" xmlns:csv="http://www.milyn.org/xsd/smooks/csv-1.2.xsd" xmlns:ftl="http://www.milyn.org/xsd/smooks/freemarker-1.1.xsd"> 
    <params> 
    <param name="inputType">input.xml</param> 
    <param name="stream.filter.type">SAX</param> 
    <param name="input.xml" type="input.type.actived">File:/F:\Practicals\WSO2\vfs_file_listening\input-csv\b.xml</param> 
    </params> 
    <ftl:freemarker applyOnElement="#document"> 
    <ftl:template><![CDATA["Name","City","Age" 
<#list .vars["csv-set"]["csv-record"] as csv_record> 
"${.vars["csv_record"]["Name"]}","${.vars["csv_record"]["City"]}","${.vars["csv_record"]["Age"]}" 
</#list>]]></ftl:template> 
    <param name="includeFieldNames">true</param> 
    <param name="seperator">,</param> 
    <param name="quote">"</param> 
    <param name="csvFields">Name,City,Age</param> 
    <param name="messageType">CSV</param> 
    <param name="templateDataProvider">input</param> 
    </ftl:freemarker> 
    <resource-config selector="#document"> 
    <resource>org.milyn.delivery.DomModelCreator</resource> 
    </resource-config> 
</smooks-resource-list> 

출력 메시지는 다음을 인쇄합니다.

<?xml version='1.0' encoding='utf-8'?> 
<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"> 
    <soapenv:Body> 
     <ax:text xmlns:ax="http://ws.apache.org/commons/ns/payload">"Name","City","Age"</ax:text> 
    </soapenv:Body> 
</soapenv:Envelope> 

입력 XML 태그의 데이터가 없으면 누구나 내가 잘못하고있는 것을 지적 할 수 있습니까?

미리 감사드립니다.

답변

2

다음 Smooks 구성으로이 작업을 수행 할 수있었습니다. (wso2 dev 지원 덕분에 Evanthika). 있습니다 행해졌

<?xml version="1.0" encoding="UTF-8"?> 
<smooks-resource-list xmlns="http://www.milyn.org/xsd/smooks-1.1.xsd" 
    xmlns:ftl="http://www.milyn.org/xsd/smooks/freemarker-1.1.xsd"> 
    <params> 
     <param name="stream.filter.type">SAX</param> 
     <param name="inputType">input.xml</param> 
     <param name="input.xml" type="input.type.actived">File:/C:\Work\2016\09_ESB_Auto_Mail_rpts\TestFiles\TestFileXMLCSVMap.xml 
     </param> 
     <param name="default.serialization.on">true</param> 
    </params> 
    <resource-config selector="csv-set,csv-record"> 
     <resource>org.milyn.delivery.DomModelCreator</resource> 
    </resource-config> 
    <ftl:freemarker applyOnElement="csv-record"> 
     <ftl:template> 
      <!-- <#ftl ns_prefixes={"D":"http://ws.apache.org/ns/synapse"}> ${.vars["csv-record"].Name},${.vars["csv-record"].City},${.vars["csv-record"].Age} --> 
     </ftl:template> 
     <param name="quote">"</param> 
     <param name="includeFieldNames">true</param> 
     <param name="csvFields">Name,City,Age</param> 
     <param name="seperator">,</param> 
     <param name="messageType">CSV</param> 
     <param name="templateDataProvider">input</param> 
    </ftl:freemarker> 
</smooks-resource-list> 

변경, XML 네임 스페이스

  • <ftl:template>. (제 경우에는 데이터 서비스에서 온 것이기 때문에 <#ftl ns_prefixes> 태그의 http://ws.apache.org/ns/synapse 네임 스페이스). smooks가 작동하려면

  • <resource-config selector="csv-set,csv-record"><ftl:freemarker applyOnElement="csv-record">는 요소를 지적합니다.

희망 사항은 누구에게도 도움이되기를 바랍니다.