如何使用smook mediator将csv转换为xml?

时间:2015-04-01 10:10:43

标签: csv wso2 smooks

我的代理使用vfs传输来读取csv文件。 csv文件的内容1,9,WSO2

我想将此csv内容转换为如下

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org /soap/envelope/"  xmlns:xsd="http://services.samples">
   <soapenv:Header/>
       <soapenv:Body>
         <xsd:placeOrder>
        <xsd:order>
            <xsd:price>1</xsd:price>
            <xsd:quantity>9</xsd:quantity>
            <xsd:symbol>WSO2</xsd:symbol>
        </xsd:order>
     </xsd:placeOrder>
   </soapenv:Body>

</soapenv:Envelope>

使用smook mediator。

smook配置文件应该使用java绑定(使用HashMap和ArrayList)和freemarker来进行转换。 (优选方法)

任何人都可以帮助我吗???? (如果是,请发布答案)

3 个答案:

答案 0 :(得分:0)

您需要使用CSVParser。

<smooks-resource-list xmlns="http://www.milyn.org/xsd/smooks-1.0.xsd">
   <resource-config selector="org.xml.sax.driver">
    <resource>org.milyn.csv.CSVParser</resource>
    <param name="fields" type="string-list">price, quantity,symbol</param>
  </resource-config>
</smooks-resource-list>

您可以找到这个post有用的

答案 1 :(得分:0)

我创建了一个代理服务,我正在使用VFS来执行文件处理。为此启用了vfs。

<proxy xmlns="http://ws.apache.org/ns/synapse" name="CSVtoXMLSmooks" startOnLoad="true" statistics="disable" trace="disable" transports="vfs,http,https">
   <target>
      <inSequence>
         <smooks config-key="CsvtoXml_Smooks">
            <input type="text"/>
            <output type="xml"/>
         </smooks>
         <property expression="$body/*" name="payload" scope="default" type="STRING"/>
         <log level="custom">
            <property expression="get-property('payload')" name="Response payload==="/>
         </log>
      </inSequence>
   </target>
   <parameter name="transport.PollInterval">1</parameter>
   <parameter name="transport.vfs.FileURI">file:///Home/smooks/In</parameter>
   <parameter name="transport.vfs.ContentType">text/plain</parameter>
   <parameter name="transport.vfs.ActionAfterProcess">MOVE</parameter>
   <parameter name="transport.vfs.FileNamePattern">.*.csv</parameter>
   <parameter name="transport.vfs.MoveAfterProcess">file:///Home/smooks/Out</parameter>
   <description/>
</proxy>

在代理服务中。呼叫smooks中介。

<smooks config-key="CsvtoXml_Smooks">
        <input type="text"/>
        <output type="xml"/>
     </smooks>

创建一个本地条目以定义smooks mediator的映射和过程。

<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">
  <resource-config selector="org.xml.sax.driver">
     <resource>org.milyn.csv.CSVReader</resource>
     <param name="fields">CustID,CustName,CustAddress</param>
     <param name="rootElementName">data</param>
     <param name="recordElementName">csvRecord</param>
  </resource-config>

示例输入:

1,chris,india
2,sam,South india

输出将如下:

 <data><csvRecord number="1"><CustID>1</CustID><CustName>chris</CustName><CustAddress>india</CustAddress></csvRecord><csvRecord number="2"><CustID>2</CustID><CustName>sam</CustName><CustAddress>South india</CustAddress></csvRecord></data>

试试这个。谢谢。

答案 2 :(得分:-1)

请参阅以下文章。它解释了类似的情况。 https://medium.com/sa-team-blog/reading-files-and-sending-file-content-to-an-api-using-wso2-enterprise-integrator-4118db8e295c?source=friends_link&sk=5242b3c380f100b1bccaadf183f19836

总而言之,您必须执行以下操作。

首先,创建一个ESB解决方案项目 然后,在该项目中创建一个文件处理程序代理服务,传输类型=“ VFS”。 在代理服务XML文件中定义VFS参数作为参数属性。 将smooks中介程序拖放到代理服务中的输入消息流中。 在您的ESB解决方案项目中创建一个本地条目,并在该本地条目文件中定义smooks属性。 然后将该本地条目文件名作为smooks介体的smooks配置键。