0

我的代理使用 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 中介。

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

谁能帮我吗 ????(如果是,请发布答案)

4

3 回答 3

1

我创建了一个代理服务,我正在使用 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>

试试这个。谢谢。

于 2018-05-16T02:24:21.493 回答
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>

你会发现这篇文章很有用

于 2015-04-02T12:49:42.133 回答
-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 中介。

于 2019-10-13T11:38:00.920 回答