我需要使用WSO2 ESB将通过MQ接收的传入固定长度文本数据(每个消息一行文本)调解为XML格式,然后通过HTTP将转换后的数据发送到SOAP端点。
据我所知,我可以使用WSO2 ESB管理控制台配置InSequence以使用子字符串函数进行数据解析和映射,然后设置代理服务以包含此配置的序列。
我需要有关如何在步骤中详细完成所有这些操作的帮助。非常感谢有人可以提供一些示例或链接到一些关于操作方法的网页。
谢谢!
答案 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的类路径中。