为了向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节点的配置为
HttpSettings
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
请尝试:
SET OutputRoot.BLOB.BLOB = CAST(InputRoot.BLOB.BLOB as char CCSID 1208 Encoding 815);
(我没有合乎逻辑的解释,但你对输入的解释是正确的(顺便说一下,这条线对我来说有点奇怪
到您的计算节点中只需写下它,您的输入消息就可以输出
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;
希望这对你有用