1

我正在尝试解决任何感谢的帮助。提前致谢

该服务是一个文件传递,它获取一个 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() 

我尝试过使用不同的流类型......文件,二进制......但没有运气

- 下面的一般 BPL

/// 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>
4

1 回答 1

0

你可以试试这个代码片段。我在社区里得到了答案。

<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>
于 2021-08-31T13:24:35.463 回答