Отправка файла PDF в сообщении REST
Я пытаюсь понять это, любая помощь будет оценена. заранее спасибо
Служба представляет собой сквозную передачу файла, которая принимает PDF-файл, а затем использует приведенный ниже код BPL для создания остальной оболочки и отправляет данные потока. Я не захватываю поток из входящего правильно, «request.Stream» или «request.StreamFC» всегда выдает следующую ошибку.
Вот что отправляется и возвращается в сообщении ..
запрос:
*
<Stream>
15@%Library.FileCharacterStream
</Stream>
response:
<Stream>
Unable to load xml from message: Data at the root level is invalid. Line 1, position 1.
</Stream>
-Я думаю, моя проблема в том, что я использую неправильный класс с помощью "%GlobalStreamCharacter" или необработанный входящий PDF CDATA, который я обрабатываю неправильно.
set context.RESTMessage.Stream=##class(%GlobalCharacterStream).%New()
Я пробовал использовать разные типы потоков ... File, Binary ... но не повезло
-Общий БПЛ ниже
/// Определение BPL X
Data BPL [ XMLNamespace = "http://www.intersystems.com/bpl" ]
{
<process language='objectscript' request='Ens.StreamContainer' response='Ens.Response'
height='2000' width='2000' >
<context>
.....
.....
....
<code name='Create REST Message' xpos='200' ypos='250' >
<![CDATA[
set context.RESTMessage=##class(EnsLib.HTTP.GenericMessage).%New()
set context.RESTMessage.Stream=##class(%GlobalCharacterStream).%New()
set tSC=context.RESTMessage.Stream.Write(request.StreamFC)
set tSC=context.RESTMessage.HTTPHeaders.SetAt("application/xml","Content-Type")
set tSC=context.RESTMessage.HTTPHeaders.SetAt(context.RESTMessage.Stream.Size,"Content-
Length")
set tSC=context.RESTMessage.HTTPHeaders.SetAt("POST","HttpRequest")
]]>
</code>
1 ответ
Вы можете попробовать этот фрагмент кода. Я получил ответ в сообществе.
<call name='To application Rest' target='To application REST' async='0'>
<request type='EnsLib.REST.GenericMessage' >
<assign property="callrequest.Stream" value='##class(%Stream.GlobalCharacter).%New()'/>
<assign property="status" value='callrequest.Stream.CopyFrom(request.StreamFC)' action="set" />
<assign property="status" value='callrequest.HTTPHeaders.SetAt("application/xml", "Content-Type")' action="set" />
<assign property="status" value='callrequest.HTTPHeaders.SetAt(callrequest.Stream.Size, "Content-Length")' action="set" />
<assign property="status" value='callrequest.HTTPHeaders.SetAt("POST", "HttpRequest")' action="set" />
</request>
</call>