如何使用WSO2 ESB来调解固定长度的文本数据

时间:2014-08-26 21:53:03

标签: wso2 esb

我需要使用WSO2 ESB将通过MQ接收的传入固定长度文本数据(每个消息一行文本)调解为XML格式,然后通过HTTP将转换后的数据发送到SOAP端点。

据我所知,我可以使用WSO2 ESB管理控制台配置InSequence以使用子字符串函数进行数据解析和映射,然后设置代理服务以包含此配置的序列。

我需要有关如何在步骤中详细完成所有这些操作的帮助。非常感谢有人可以提供一些示例或链接到一些关于操作方法的网页。

谢谢!

3 个答案:

答案 0 :(得分:2)

你应该看看smooks,我认为这是最好的解决方案:

CSV:http://wso2.com/library/blog-post/2013/09/csv-to-xml-transformation-with-wso2-esb-smooks-mediator/

修正了Lengh文字:http://vvratha.blogspot.fr/2014/05/processing-large-text-file-using-smooks.html

另一种解决方案是编写自己的messageBuilder,搜索" org.apache.axis2.format.PlainTextBuilder"找到源代码......

答案 1 :(得分:1)

我同意Jean-Michel的观点,认为smooks是一个很好的解决方案。但是,这也可以在单个简单代理服务中完成。为您的终端设置一个简单的传递代理。然后,在源视图(或向导)中打开它并配置insequence以添加PayloadMediator。

以下是如何使用Payload Mediator [1]的示例 下面是一个摘录示例,其中包含一些xpath表达式,用于从输入中提取固定长度字段:

    <payloadFactory media-type="xml">
        <format>
            <m:body xmlns:m="http://services.samples">
                <m:field1>$1</m:field1>
                <m:field2>$2</m:field2>
            </m:body>
        </format>
        <args>
            <arg expression="substring(//*,0,10)"/>
            <arg expression="substring(//*,10,10)"/>
        </args>
    </payloadFactory>

您可能还需要在序列中使用内容类型属性,因为您要将内容类型更改为xml:

<property name="ContentType" value="text/xml" scope="axis2"/>

祝你好运!

[1] https://docs.wso2.com/pages/viewpage.action?pageId=33136018

答案 2 :(得分:0)

对于那些对工作解决方案感兴趣的人,这是我的smooks配置:

<?xml version="1.0"?>
<smooks-resource-list xmlns="http://www.milyn.org/xsd/smooks-1.1.xsd" xmlns:fl="http://www.milyn.org/xsd/smooks/fixed-length-1.3.xsd">
<fl:reader fields="price[5]?trim,quantity[5]?trim,symbol[5]?trim.upper_case,comment[10]?trim" recordElementName="order">
    <fl:listBinding beanId="order" class="test.Order" />
</fl:reader>
</smooks-resource-list>

另外,需要将test.Order的jar文件添加到WSO2 ESB的类路径中。