1

我正在创建一个通过 SOAP 接收消息的简单流程,在 IIB 中我使用 ESQL 处理消息。

这是我的 SOAP 消息:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:com="http://ComponentesTI">
 <soapenv:Header/>
 <soapenv:Body>
  <com:PushMessageRequest>
     <Message>
      <SerializedContent>?</SerializedContent>
        <HTTPAddress>?</HTTPAddress>
     </Message>
     <Identification>?</Identification>
  </com:PushMessageRequest>
 </soapenv:Body>
</soapenv:Envelope>

我需要通过使用 ESQL(使用 GUID)更改标识字段来复制此消息

像这样的东西:

CREATE LASTCHILD OF OutputRoot DOMAIN 'XMLNSC';
DECLARE statement REFERENCE TO OutputRoot.XMLNSC;
DECLARE statement2 REFERENCE TO InputRoot.XMLNSC;
SET statement = statement2;
SET statement.PushMessageRequest.Identification = UUIDASCHAR;
4

2 回答 2

1

您忘记在 ESQL 语法中使用 XML 命名空间。

CREATE LASTCHILD OF OutputRoot DOMAIN 'XMLNSC';
DECLARE statement REFERENCE TO OutputRoot.XMLNSC;
DECLARE statement2 REFERENCE TO InputRoot.XMLNSC;
SET statement = statement2;

DECLARE com NAMESPACE 'http://ComponentesTI';
SET statement.com:PushMessageRequest.Identification = UUIDASCHAR;
于 2017-03-24T18:07:59.933 回答
0

下面的代码片段考虑了 SOAP 信封。

复制所有内容,包括 Properties 文件夹和任何其他 Header 文件夹,然后更改 Identification 字段。

SET OutputRoot = InputRoot;
SET OutputRoot.XMLNSC.*:Envelope.*:Body.*:PushMessageRequest.Message.Identification = UUIDASCHAR;

创建一个新的 XMLNSC 聚合,其中包含根据需要处理 Properties 文件夹和其他标头的其他代码。

CREATE LASTCHILD OF OutputRoot DOMAIN 'XMLNSC';
SET OutputRoot.XMLNSC.*:Envelope.*:Body.*:PushMessageRequest.Message.Identification = UUIDASCHAR;

此外,根据您使用的是 HTTPInput 还是 SOAPInput 节点,顶级聚合可能是 SOAP 而不是 XMLNSC。

最后,由于我们没有更改任何命名空间并覆盖标识中的值,因此我使用语法* : 作为命名空间,因此我不必为soapenvcom声明命名空间变量

于 2018-05-31T13:12:26.147 回答