Добавление содержимого JSON в файл JSON в WSO2

У меня есть несколько полезных нагрузок JSON, которые нужно добавить в файл JSON. Вот как будет выглядеть моя полезная нагрузка JSON:

{"variant": {"940894": {"attributes": {"Size": "XL" } } } }

Я буду получать несколько полезных нагрузок json этого типа. В конце мне нужно сформировать файл, который выглядит так:

[
{"variant": {"940894": {"attributes": {"Size": "XL" } } } },
{"variant": {"940895": {"attributes": {"Size": "Med"    } } } },
{"variant": {"940895": {"attributes": {"Size": "Small"  } } } }
]

Это свойства, которые я установил для требования:

<property expression = "fn:concat('Test',get-property('File_Name'),'.txt')" name = "FILE_NAME" scope = "default"
<propertyGroup description = "File and OutputPayload properties">
        <property name = "messageType" scope = "axis2" type = "STRING" value = "text/plain"/>
        <property name = "ContentType" scope = "axis2" type = "STRING" value = "text/plain"/>
        <property expression = "$ctx:FILE_NAME" name = "transport.vfs.ReplyFileName" scope = "transport" type = "STRING"/>
        <property name = "OUT_ONLY" scope = "default" type = "STRING" value = "true"/>
    </propertyGroup>       
            <call>
        <endpoint>
            <address uri = "vfs:sftp://username:password/home/user/test/out/json?transport.vfs.Append=true">
                <suspendOnFailure>
                    <initialDuration>-1</initialDuration>
                    <progressionFactor>1</progressionFactor>
                </suspendOnFailure>
                <markForSuspension>
                    <retriesBeforeSuspension>0</retriesBeforeSuspension>
                </markForSuspension>
            </address>
        </endpoint>
    </call>

Но я получаю сообщение об ошибке: «Тип файла не поддерживает режим добавления». Что еще я могу попробовать здесь.

Это означает, что файловая система не поддерживает добавление файлов. Можно ли прочитать файл, добавить содержимое и заменить файл?

ycr 08.02.2023 15:27

Но это дает ту же ошибку для каждого типа файла. Я пробовал csv, xml, txt, json.

Ruby 09.02.2023 08:11

Работает только в локальной файловой системе. но не в SFTP

Ruby 09.02.2023 08:40
Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
1
3
66
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я посмотрел на код, и, как вы уже заметили, протокол SFTP не позволяет вам делать добавление файлов. Поддерживаемые операции для SFTP указаны здесь в коде.

Capability.CREATE, Capability.DELETE, Capability.RENAME, Capability.GET_TYPE,
Capability.LIST_CHILDREN, Capability.READ_CONTENT, Capability.URI, Capability.WRITE_CONTENT,
Capability.GET_LAST_MODIFIED, Capability.SET_LAST_MODIFIED_FILE, Capability.RANDOM_ACCESS_READ

Но если вместо этого вы используете протокол FTP, вы сможете выполнять добавление файлов, поскольку оно поддерживается здесь.

Capability.CREATE, Capability.DELETE, Capability.RENAME,
Capability.GET_TYPE, Capability.LIST_CHILDREN,
Capability.READ_CONTENT, Capability.GET_LAST_MODIFIED,
Capability.URI, Capability.WRITE_CONTENT,
Capability.APPEND_CONTENT, Capability.RANDOM_ACCESS_READ

Добавление работает и с локальной файловой системой.

Если вы хотите добавить файл и по-прежнему использовать SFTP, вам придется ПРОЧИТАТЬ -> ДОБАВИТЬ -> ЗАПИСАТЬ файл. Или можете подумать о написании посредника пользовательского класса.

Другие вопросы по теме