【问题标题】:integration bus httprequest content length集成总线 httprequest 内容长度
【发布时间】:2020-01-21 18:15:24
【问题描述】:

为了向 http 服务器发送 PUT 请求,我使用的是 HttpRequest 节点。消息通过 ESQL 计算节点。问题是发送到服务器的消息的内容长度为 0。请求不包含任何数据,尽管用于消息正文的变量有内容。 如何从 esql 代码传递 put http 请求的内容?

esql代码如下:

SET OutputLocalEnvironment = InputLocalEnvironment; 
SET OutputLocalEnvironment.Destination.HTTP.RequestURL = ...; 
SET OutputRoot.HTTPRequestHeader."Content-Type" = 'text/plain'; 
SET OutputRoot.HTTPRequestHeader."Authorization" = 'Bearer ' || … ; 
SET OutputRoot.HTTPRequestHeader."Host" = ...'; 
SET OutputRoot.BLOB = CAST(InputRoot.BLOB.BLOB as char CCSID 1208 Encoding 815); 

HTTPRequest节点的配置是

Http设置

HTTP method: PUT 
HTTP version 1.1 
Enable keep-alive <checked> 

Request Timeout: 20 
HTTP Proxy Location : <blank> 
Follow HTTP redirection: <unchecked> 

Advanced: 
Use whole input message as request : <un-checked> 
Request Message Location in Tree : InputRoot.BLOB 
Replace input message with web-service response: <checked> 
Generate default HTTP headers : <un-checked> 

VALIDATION: None

【问题讨论】:

    标签: ibm-integration-bus extended-sql


    【解决方案1】:

    请尝试:

    SET OutputRoot.BLOB.BLOB = CAST(InputRoot.BLOB.BLOB as char CCSID 1208 Encoding 815); 
    

    (我没有合乎逻辑的解释,但您输入正确) 顺便说一句,这条线对我来说有点奇怪

    【讨论】:

    • 这是正确的 - 第一个“BLOB”是解析器的名称,第二个“BLOB”是该解析器中字段的名称。 BLOB 解析器只允许一个名为“BLOB”的单一字段,因为根据定义,BLOB 不能有任何内部结构。
    • 感谢您对 BLOB 解析器的解释 :)
    • 是的 BLOB BLOB 在成为习惯之前,它有点令人困惑。正如 Kimbert 指出的那样,第一级元素是解析器名称。
    【解决方案2】:

    只需在您的计算节点中写入此内容,您的输入消息就会转到输出

    CREATE COMPUTE MODULE Compute
        CREATE FUNCTION Main() RETURNS BOOLEAN
        BEGIN
            CALL CopyMessageHeaders();
            CALL CopyEntireMessage();
    
    
            RETURN TRUE;
        END;
    
        CREATE PROCEDURE CopyMessageHeaders() BEGIN
            DECLARE I INTEGER 1;
            DECLARE J INTEGER;
            SET J = CARDINALITY(InputRoot.*[]);
            WHILE I < J DO
                SET OutputRoot.*[I] = InputRoot.*[I];
                SET I = I + 1;
            END WHILE;
        END;
    
        CREATE PROCEDURE CopyEntireMessage() BEGIN
            SET OutputRoot = InputRoot;
        END;
    END MODULE;
    

    希望这对你有用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-28
      • 2012-11-03
      相关资源
      最近更新 更多