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

如何使用WSO2 ESB调解固定长度的文本数据,wso2,esb,Wso2,Esb,我需要使用WSO2 ESB将通过MQ接收到的固定长度文本数据(每条消息一行文本)转换为XML格式,然后通过HTTP将转换后的数据发送到SOAP端点 我知道我可以使用WSO2 ESB管理控制台配置一个插入序列来使用substring函数进行数据解析和映射,然后设置一个代理服务来包含这个配置的序列 我需要关于如何在步骤中详细完成所有这些的帮助。如果有人能提供一些关于如何操作的示例或网页链接,我将不胜感激 谢谢 你应该看看smooks,我认为这是最好的解决方案: CSV:http://wso2.com

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

我知道我可以使用WSO2 ESB管理控制台配置一个插入序列来使用substring函数进行数据解析和映射,然后设置一个代理服务来包含这个配置的序列

我需要关于如何在步骤中详细完成所有这些的帮助。如果有人能提供一些关于如何操作的示例或网页链接,我将不胜感激


谢谢

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

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

固定长度文本:
http://vvratha.blogspot.fr/2014/05/processing-large-text-file-using-smooks.html


另一个解决方案是编写自己的messageBuilder,搜索“
org.apache.axis2.format.PlainTextBuilder
”以查找源代码……

我同意Jean Michel的观点,smooks将是一个很好的解决方案。但是,这也可以在一个简单的代理服务中实现。设置到端点的简单直通代理。然后,在源代码视图(或向导)中打开它,并配置插入序列以添加PayloadMediator

下面是一个如何使用负载中介器的示例[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>

$1
$2

对于那些对工作解决方案感兴趣的人,这里是我的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的类路径中

<?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>