我的代理使用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来进行转换。 (优选方法)
任何人都可以帮助我吗???? (如果是,请发布答案)
答案 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)
总而言之,您必须执行以下操作。
首先,创建一个ESB解决方案项目 然后,在该项目中创建一个文件处理程序代理服务,传输类型=“ VFS”。 在代理服务XML文件中定义VFS参数作为参数属性。 将smooks中介程序拖放到代理服务中的输入消息流中。 在您的ESB解决方案项目中创建一个本地条目,并在该本地条目文件中定义smooks属性。 然后将该本地条目文件名作为smooks介体的smooks配置键。