InputRoot и InputBody имеют значение NULL для MQ ESQL ComputeNode

Мне было поручено создать новый поток, и по какой-то причине я не могу получить доступ к данным, которые поступают из очереди «IN». Я использую MessageBrokerToolkit 7.0.0.1 в Windows. Тестовые сообщения такие же, как и в производственной среде.

CREATE COMPUTE MODULE FLOW_Compute
    CREATE FUNCTION Main() RETURNS BOOLEAN
    BEGIN
        DECLARE TMP ROW PASSTHRU('SELECT RAWTOHEX(UTL_RAW.CAST_TO_RAW(DBMS_OBFUSCATION_TOOLKIT.md5(INPUT_STRING => CURRENT_TIMESTAMP)))UNIQUE_ID FROM DUAL'); 
        DECLARE blobMSG BLOB InputRoot.BLOB.BLOB; 
        DECLARE MSG CHARACTER CAST(blobMSG AS CHARACTER CCSID InputRoot.MQMD.CodedCharSetId ENCODING InputRoot.MQMD.Encoding); 
        DECLARE TITLE CHAR InputRoot.XML.Request."MessageID";

        PASSTHRU(
            'INSERT INTO PA0101.DEBUG_TABLE VALUES(?,?,?)',
            TMP.UNIQUE_ID,
            TITLE,
            MSG,
        );
    RETURN TRUE;
END; 

Строки DEBUG_TABLE выглядят так: (разделены вертикальной чертой)

F69A159|||              
11C7EBF|||              
1077ADD|||              

Вот пример сообщения:

<Request>
 <MessageID>a1f5298a-e339-423b-ac9a-4654cb46e965</MessageID>
 <SendResponse>false</SendResponse>
 <BasicElements>
  <FeedType>Realtime</FeedType>
  <MsgDT>08/09/2015</MsgDt>
  <Category>Action</Category>
  <PriorityCd>1</PriorityCd>
  <SubjectTx>This is important</SubjectTx>
  <DetailTx>[lots of html]</DetailTx>
 </BasicElements>
</Request>

Когда я пытаюсь запустить утилиты командной строки на сервере, я обычно получаю:

<command>
ld.so.1: <command>: fatal: libjvm.so: open failed: No such file or directory
Killed

Код не выдает никаких предупреждений, а файл .bar строится + развертывается, поэтому я не понимаю, что может пойти не так.


person user1958756    schedule 18.08.2015    source источник


Ответы (1)


Скорее всего, вы не используете домен сообщений, установленный на входном узле в вашем ESQL.

Вы не можете использовать одновременно домен XML и BLOB, входное сообщение будет анализироваться в одном или другом домене, как настроено на входном узле (или узлах ResetContentDescriptor в вашем потоке). Таким образом, либо InputRoot.BLOB, либо InputRoot.XML будет NULL. И я думаю, что вы на самом деле используете домен XMLNSC в своем входном узле, и тело сообщения, проанализированное в этом домене, может быть доступно через InputRoot.XMLNSC.

Если вам нужно тело сообщения как BLOB и анализировать как XML в том же потоке, вы должны установить домен сообщения как BLOB во входном узле и проанализировать последнее сообщение в потоке с помощью узла ResetContentDescriptor или с помощью параметра PARSE. СОЗДАНИЯ в ESQL:

http://www-01.ibm.com/support/knowledgecenter/api/content/nl/en-us/SSKM8N_8.0.0/com.ibm.etools.mft.doc/ak04950_.htm

person Attila Repasi    schedule 19.08.2015
comment
Большое спасибо за то, что нашли время помочь. Видимо не умею читать документацию;). - person user1958756; 19.08.2015