Wso2esb WSO2 ESB是否可能阻止vfs?

Wso2esb WSO2 ESB是否可能阻止vfs?,wso2esb,Wso2esb,我正在构建WSO2 ESB 4.8.1以接收传入的二进制消息,并使用VFS将其存储到磁盘。我可以使用Send mediator将消息存储到文件中,但由于这是非阻塞中介,其余序列将同时继续。这会导致存储文件需要更多时间的大型文件出现问题 问题:是否可以使用Callout mediator或其他阻塞机制来存储文件,以便在VFS完全存储文件后ESB将继续处理序列?我尝试了callout mediator,但它不支持vfs端点url,例如“vfs:file:///tmp" 谢谢你的提示。通过创建一个自定

我正在构建WSO2 ESB 4.8.1以接收传入的二进制消息,并使用VFS将其存储到磁盘。我可以使用Send mediator将消息存储到文件中,但由于这是非阻塞中介,其余序列将同时继续。这会导致存储文件需要更多时间的大型文件出现问题

问题:是否可以使用Callout mediator或其他阻塞机制来存储文件,以便在VFS完全存储文件后ESB将继续处理序列?我尝试了callout mediator,但它不支持vfs端点url,例如“vfs:file:///tmp"


谢谢你的提示。

通过创建一个自定义类中介来解决这个问题,该类中介将数据传输到文件中。在类中介完成作业后,序列将继续

下面是类中介代码:

public class FileSaveMediator extends AbstractMediator {

    boolean traceOn = false;
    boolean traceOrDebugOn = false;


    public boolean mediate(MessageContext context) {

        traceOn = isTraceOn(context);
        traceOrDebugOn = isTraceOrDebugOn(traceOn);

        traceOrDebug(traceOn, "Start : FileSaveMediator");

        // Get property "fileuri" from synapse context
        String fileuri = (String)context.getProperty("fileuri");

        SOAPBody body = context.getEnvelope().getBody();

           OMText binaryNode = (OMText) (body.getFirstElement()).getFirstOMChild();
           DataHandler actualDH;
           actualDH = (DataHandler) binaryNode.getDataHandler();

           FileOutputStream fos = null;
           try {
               fos = new FileOutputStream(fileuri);
               actualDH.writeTo(fos);          

           } catch (Exception e)
           {
               e.printStackTrace();
           }

           // Clear Body after saving file by setting dummy tags.

           try {
            body.setFirstChild(AXIOMUtil.stringToOM("<p></p>"));
        } catch (XMLStreamException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {

            // Finally make sure that fileoutstream is closed
            if (fos!=null)
                try {
                    fos.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
        }

        traceOrDebug(traceOn, "End : FileSaveMediator");

        return true;

    }
公共类FileSaveMediator扩展了AbstractMediator{
布尔traceOn=false;
布尔traceOrDebugOn=false;
公共布尔中介(MessageContext上下文){
traceOn=isTraceOn(上下文);
TraceOrdBugon=isTraceOrDebugOn(traceOn);
traceOrDebug(traceOn,“开始:FileSaveMediator”);
//从synapse上下文获取属性“fileuri”
String fileuri=(String)context.getProperty(“fileuri”);
SOAPBody body=context.getEnvelope().getBody();
OMText二进制节点=(OMText)(body.getFirstElement()).getFirstOMChild();
数据处理器;LDH;
actualDH=(DataHandler)binaryNode.getDataHandler();
FileOutputStream=null;
试一试{
fos=新的FileOutputStream(fileuri);
实际写入(fos);
}捕获(例外e)
{
e、 printStackTrace();
}
//通过设置虚拟标记,在保存文件后清除正文。
试一试{
body.setFirstChild(axiomultil.stringToOM(“”);
}捕获(XMLStreamException e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}最后{
//最后,确保fileoutstream已关闭
如果(fos!=null)
试一试{
fos.close();
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
traceOrDebug(traceOn,“End:FileSaveMediator”);
返回true;
}