使用ESQL丰富soap消息

时间:2017-03-23 21:13:10

标签: soap ibm-integration-bus extended-sql

我正在创建一个通过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;

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

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

复制包括“属性”文件夹和任何其他“标题”文件夹在内的所有内容,然后更改“标识”字段。

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

使用处理Properties文件夹和其他标头的其他代码创建新的XMLNSC聚合。

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

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

最后,因为我们没有更改任何名称空间并且正在覆盖标识中的值,所以我使用语法 * :作为名称空间,所以我没有必要声明 soapenv com

的命名空间变量