首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >wso2中Iterator介质内部的VFS传输错误

wso2中Iterator介质内部的VFS传输错误
EN

Stack Overflow用户
提问于 2022-07-20 14:15:00
回答 1查看 98关注 0票数 0

我正在转换一个csv文件,其中每个csv记录都被转换为json。我使用迭代器中介器将每个json对象发送到一个端点,方法是使用有效负载工厂中介对其进行修改。但我在最后得到了这个VFS错误。我怎么才能解决这个问题?

代码语言:javascript
复制
ERROR {VFSTransportSender} - Error while attaching VFS file system properties. null
[2022-07-20 19:30:46,925] ERROR {VFSTransportSender} - Unable to determine out transport information to send message
[2022-07-20 19:30:46,929] ERROR {Axis2Sender} - {proxy:TestProxy} Access-Control-Allow-Credentials:true,Access-Control-Allow-Headers:Authorization, Content-Type, fluent.account,Access-Control-Allow-Methods:POST, PUT, GET, OPTIONS, DELETE,Access-Control-Allow-Origin:*,Access-Control-Expose-Headers:flex.type, flex.version,Access-Control-Max-Age:3600,Cache-Control:no-cache, no-store, max-age=0, must-revalidate,Connection:keep-alive,Content-Type:application/json;charset=UTF-8,Date:Wed, 20 Jul 2022 14:00:47 GMT,Expires:0,Pragma:no-cache,Server:nginx/1.10.3 (Ubuntu),Transfer-Encoding:chunked,X-Content-Type-Options:nosniff,X-Frame-Options:DENY,X-XSS-Protection:1; mode=block, Unexpected error sending message back org.apache.axis2.AxisFault: Unable to determine out transport information to send message
        at org.apache.axis2.transport.base.AbstractTransportSender.handleException(AbstractTransportSender.java:234)
        at org.apache.synapse.transport.vfs.VFSTransportSender.writeFile(VFSTransportSender.java:331)
        at org.apache.synapse.transport.vfs.VFSTransportSender.sendMessage(VFSTransportSender.java:189)
        at org.apache.axis2.transport.base.AbstractTransportSender.invoke(AbstractTransportSender.java:119)
        at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:442)
        at org.apache.synapse.core.axis2.Axis2Sender.sendBack(Axis2Sender.java:213)
        at org.apache.synapse.mediators.builtin.RespondMediator.mediate(RespondMediator.java:46)
        at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:109)
        at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:263)
        at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.mediateFromContinuationStateStack(Axis2SynapseEnvironment.java:820)
        at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2SynapseEnvironment.java:322)
        at org.apache.synapse.core.axis2.SynapseCallbackReceiver.handleMessage(SynapseCallbackReceiver.java:608)
        at org.apache.synapse.core.axis2.SynapseCallbackReceiver.receive(SynapseCallbackReceiver.java:207)
        at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180)
        at org.apache.synapse.transport.passthru.ClientWorker.run(ClientWorker.java:298)
        at org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
        at java.base/java.lang.Thread.run(Thread.java:834)

突触Configs

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<proxy name="TestProxy" startOnLoad="true" transports="http https vfs" xmlns="http://ws.apache.org/ns/synapse">
    <target>
        <inSequence>
            <smooks config-key="smooks_conf">
                <input type="text"/>
                <output type="xml"/>
            </smooks>
            <log level="full"/>
            <property name="messageType" scope="axis2" type="STRING" value="application/json"/>
            <log>
                <property expression="json-eval($)" name="Response"/>
            </log>
            <call-template target="Template"/>
            <log>
                <property name="Info" value="Before Iteration"/>
            </log>
 
            <iterate continueParent="true" expression="$body//ProductData/Product" id="Iterate-over-products" xmlns:ns="http://org.apache.synapse/xsd">
                <target>
                    <sequence>
                    <log>
                <property name="Info" value="Inside Iteration"/>
            </log>
                        <payloadFactory media-type="json">
                            <format>&#xd;
{&#xd;
          "ref": "$1",&#xd;
        "name": "$2",&#xd;
        "summary": "This is a HP",&#xd;
 
         "attributes": [&#xd;
            {&#xd;
                "name": "imageUrl",&#xd;
                "type": "STRING",&#xd;
                "value": "$3"&#xd;
            },&#xd;

        ]&#xd;
    }&#xd;
}&#xd;
</format>
                            <args>
                                <arg evaluator="json" expression="$.Product.ProductCode" />
                                <arg evaluator="json" expression="$.Product.ProductName" />
                                <arg evaluator="json" expression="$.Product.ProductUrl"/>
                               
                            </args>
                        </payloadFactory>
                        <property name="messageType" scope="axis2" type="STRING" value="application/json"/>
<call>
                <endpoint>
                    <http method="post" uri-template""=>
                        <suspendOnFailure>
                            <initialDuration>-1</initialDuration>
                            <progressionFactor>-1</progressionFactor>
                            <maximumDuration>0</maximumDuration>
                        </suspendOnFailure>
                        <markForSuspension>
                            <retriesBeforeSuspension>0</retriesBeforeSuspension>
                        </markForSuspension>
                    </http>
                </endpoint>
            </call>
                        <log>
                            <property expression="json-eval($)" name="product"/>
                        </log>
                    </sequence>
                </target>
            </iterate>
            <respond/>
        </inSequence>
        <outSequence/>
        <faultSequence/>
    </target>
    <parameter name="transport.vfs.Streaming">true</parameter>
    <parameter name="transport.PollInterval">1</parameter>
    <parameter name="transport.vfs.FileURI">file://C://in</parameter>
    <parameter name="transport.vfs.ContentType">text/plain</parameter>
    <parameter name="transport.vfs.ActionAfterProcess">MOVE</parameter>
    <parameter name="transport.vfs.MoveAfterFailure">file://C:/out</parameter>
    <parameter name="transport.vfs.ActionAfterFailure">MOVE</parameter>
    <parameter name="transport.vfs.FileNamePattern">.*.csv</parameter>
    <parameter name="transport.vfs.MoveAfterProcess">file://C:/history</parameter>
</proxy>

迭代中介器打印之前的所有日志。流从迭代中介停止并产生VFS传输错误。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-21 13:06:53

由于您在模板中使用的是自定义连接器,所以假设您的连接器没有正确编写,这将覆盖当前的消息上下文。因此,在连接器之后,没有需要迭代的内容。为了避免这个问题,将消息保存到Smooks中介器之后的属性,然后在Iterate中介器之前恢复消息。为此,您可以使用Enrich Mediator

以保存有效载荷

代码语言:javascript
复制
<enrich>
    <source type="body"/>
    <target type="property" property="jsonPayload"/>
</enrich>

以恢复有效载荷

代码语言:javascript
复制
<enrich description="Restore original payload">
        <source clone="false" property="jsonPayload" type="property"/>
        <target type="body"/>
</enrich>

附加注意事项:当您使用Iterate Mediator时,应该始终伴随着一个Aggregate mediator。您可以阅读更多关于这个这里的内容。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73053281

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档