Search code examples
filewso2apache-synapsevfs

create a new file from payload in wso2


I am new to wso2 and working on a few POCs where i have to create a file at some location , i have looked into all vfs examples where there is always a file processed and written to a new location.

What i want to achieve is write a new file to a directory by the content i receive in a sequence.

For my requirement process i have exposed a REST service and it calls this sequence.

The sequence configuration is as follows.

<?xml version="1.0" encoding="UTF-8"?>
<sequence xmlns="http://ws.apache.org/ns/synapse" name="FileWriteSequence">
<clone>
    <target>
        <sequence>

            <property name="OUT_ONLY" value="true" scope="default" type="STRING"/>
             <property name="transport.vfs.ReplyFileName" value="myOutputFile.txt" scope="transport" type="STRING"/>
            <send>
                <endpoint name="FileEpr">
                    <address uri="vfs:file://D:/Tools"/>
                </endpoint>
            </send>
        </sequence>
    </target>
</clone>

This sequence creates a file from the latest message from the REST resource but the file name is always the project name.

Whatever i try it doesnt change.

I have tried giving other proxy parameters shown below as property above my sequence as well .Instead of paramters i passed them above the property <property name="OUT_ONLY" value="true" scope="default" type="STRING"/> Namely :-

<parameter name="transport.vfs.ActionAfterProcess">MOVE</parameter>
<parameter name="transport.vfs.MoveAfterProcess">file://D:/Tools</parameter>
<parameter name="transport.vfs.MoveAfterFailure">file://D:/backup</parameter>
<parameter name="transport.vfs.FileNamePattern">.*.txt</parameter>
<parameter name="transport.vfs.ContentType">text/plain</parameter>
<parameter name="transport.vfs.ActionAfterFailure">MOVE</parameter>

Still no progress.

Can anyone help me here?

Regards, Rahul.


Solution

  • In case anyone wants to know i have made a workaround for this i called a proxy service from my rest resource and it worked .

    In my resource i called endpoint like this

    <send> <endpoint key="FileProxyEndPt"/> </send>

    Then i created a proxy service as follows

    <proxy xmlns="http://ws.apache.org/ns/synapse" name="FileWriteProxy"
    transports="http https vfs" startOnLoad="true" trace="enable">
    <target>
        <inSequence>
    
            <clone>
                <target sequence="FileWriteSequence" />
            </clone>
        </inSequence>
        <outSequence />
        <faultSequence />
    </target>
    <parameter name="transport.vfs.ActionAfterProcess">MOVE</parameter>
    <parameter name="transport.vfs.MoveAfterProcess">file://D:/Tools</parameter>
    <parameter   name="transport.vfs.MoveAfterFailure">file://D:/backup</parameter>
    <parameter name="transport.vfs.ContentType">text/plain; charset=ISO-8859-1</parameter>
    <parameter name="transport.vfs.ActionAfterFailure">MOVE</parameter>
    

    This way it worked it but never worked exactly in a resource.So had to take a longer route , hope somebody provides a solution which can be implemented directly.