Author |
Message
|
datspats |
Posted: Thu May 10, 2007 8:06 pm Post subject: MQRFH2 header problem coming in output message body |
|
|
Voyager
Joined: 12 Apr 2007 Posts: 80 Location: Mumbai
|
Hi,
This is regarding MQRFH2 header problem. When the InputRoot.BLOB.BLOB is with some data, when i say OutputRoot.Blob.Blob = InputRoot.BLOB.BLOB then I can see MQRFH2 header properly generated for the output message in the Trace node output log,
But if incoming message is coming as Null i.e. input message body coming with no data then the portion of the MQRFH2 header is moved to Output message body. And the MQRFH2 header in the output message portion is truncated to shows last few bytes of original MQRFH2 header.
Please put on light on this, how can i get proper MQRFH2 header even if Input message body is null.
regards |
|
Back to top |
|
 |
jefflowrey |
Posted: Fri May 11, 2007 1:35 am Post subject: |
|
|
Grand Poobah
Joined: 16 Oct 2002 Posts: 19981
|
assign null to the VALUE of OutputRoot.BLOB.BLOB. _________________ I am *not* the model of the modern major general. |
|
Back to top |
|
 |
datspats |
Posted: Fri May 11, 2007 3:16 am Post subject: |
|
|
Voyager
Joined: 12 Apr 2007 Posts: 80 Location: Mumbai
|
Hi Jeff,
Thanks for reply
I will try this .......
But my requirement is that when before finally putting message to the output node, I have to Prefix and suffix the header, footer (which are the constant string) to the Output body which I receive.
But if we assign Null message body then appending header/ footer final op is all NULL.
Regards |
|
Back to top |
|
 |
jefflowrey |
Posted: Fri May 11, 2007 3:45 am Post subject: |
|
|
Grand Poobah
Joined: 16 Oct 2002 Posts: 19981
|
So use COALESCE instead.
Somewhere, presumably, you do something like
set OutputRoot.BLOB.BLOB = headerString || InputRoot.BLOB.BLOB || footerString;
Use
set OutputRoot.BLOB.BLOB = headerString || COALESCE(InputRoot.BLOB.BLOB, someDefaultValue) || footerString _________________ I am *not* the model of the modern major general. |
|
Back to top |
|
 |
datspats |
Posted: Mon May 14, 2007 4:33 am Post subject: |
|
|
Voyager
Joined: 12 Apr 2007 Posts: 80 Location: Mumbai
|
Hi jeff,
I tried
Quote: |
set OutputRoot.BLOB.BLOB = headerString || COALESCE(InputRoot.BLOB.BLOB, someDefaultValue) || footerString |
in my code. But the problem is I am getting starting section of the MQRFH2 header in the InputRoot.BLOB.BLOB of the message when I am expecting it to be NULL in this case.
I am getting following in the Inputroot.BLOB.BLOB as per TRACE node, (bytes converted to char)
RFH ........ "....... ............<usr><filename>FxEx.txt</filename><transmissionDateTime>TIMESTAMP '2007-05-14 12:20:48'</transmissionDateTime><uniqueId>Mn_FX</uniqueId><applicationArea><enrich>N</enrich><mn>Y</mn>
<pattern>MFM_HP</pattern><wmb><rename>Y</rename></wmb></applicationArea></usr> ...<mcd>
<Msd>mrm</Msd><Set>MS_IDX_2007</Set><Type>XMESSAGE</Type><Fmt>TDS</Fmt></mcd>
Whereas when I don't expect NULL in InputRoot.BLOB.BLOB, I get the right MQRFH2 header in the message. BLOB properly constructed with Header || expected_data || footer.
Regards, |
|
Back to top |
|
 |
jefflowrey |
Posted: Mon May 14, 2007 11:19 am Post subject: |
|
|
Grand Poobah
Joined: 16 Oct 2002 Posts: 19981
|
Um. Hrm. InputRoot.BLOB.BLOB should not be pointing to InputRoot.MQRFH2 - unless the MQMD.Format is not set correctly.
InputBody always points to the last chlid of InputRoot - so it could point to InputRoot.MQRFH2 if the message body is empty.
Does a trace show that the RFH2 header is being parsed properly? _________________ I am *not* the model of the modern major general. |
|
Back to top |
|
 |
fjb_saper |
Posted: Mon May 14, 2007 1:25 pm Post subject: |
|
|
 Grand High Poobah
Joined: 18 Nov 2003 Posts: 20756 Location: LI,NY
|
Looks like InputRoot.BLOB.BLOB might not be present on the Tree in this case.
So try to reference InputRoot.BLOB.BLOB and check if the reference's LastMOVE was successful.
This should give you enough granularity to resolve the problem...
Enjoy  _________________ MQ & Broker admin |
|
Back to top |
|
 |
datspats |
Posted: Mon May 14, 2007 9:34 pm Post subject: |
|
|
Voyager
Joined: 12 Apr 2007 Posts: 80 Location: Mumbai
|
Hi Jeff and fjb,
I have checked the TRACE below are my flow details/ findings.
Pls help on this.
In my message flow …before this compute node I got RCD node for which Message domain set to ‘BLOB’.
Trace after the RCD node shows that the MQRFH2 header is not properly generated and is present in the body. But ironically when the input body has some data before coming to RCD then even after RCD the MQRFH2 is generated very correctly in the message.
How do I go ahead as RCD (BLOB) node is very necessary?
Regards, |
|
Back to top |
|
 |
datspats |
Posted: Tue May 15, 2007 4:59 am Post subject: |
|
|
Voyager
Joined: 12 Apr 2007 Posts: 80 Location: Mumbai
|
Hi,
what might be exactly happening in RCD (BLOB) node as MQRFH2 is coming as paet of message body when it is suppose to be empty?
regards |
|
Back to top |
|
 |
datspats |
Posted: Thu May 17, 2007 1:38 am Post subject: |
|
|
Voyager
Joined: 12 Apr 2007 Posts: 80 Location: Mumbai
|
hi,
InputRoot.BLOB.BLOB is coming as NULL before the compute node.
regards
Datta |
|
Back to top |
|
 |
fjb_saper |
Posted: Thu May 17, 2007 6:31 pm Post subject: |
|
|
 Grand High Poobah
Joined: 18 Nov 2003 Posts: 20756 Location: LI,NY
|
fjb_saper wrote: |
Looks like InputRoot.BLOB.BLOB might not be present on the Tree in this case.
So try to reference InputRoot.BLOB.BLOB and check if the reference's LastMOVE was successful.
This should give you enough granularity to resolve the problem...
Enjoy  |
What I suspect is happening is that you are referencing /accessing a part of the message that does not exist and as such you pointer stays on the last accessed item the RHF2 which you now believe is part of the message...
Try and use the reference ...
Code: |
define mybody reference to InputRoot.BLOB.BLOB;
IF LASTMOVE(mybody) THEN
-- you do have a body
SET OutputRoot.BLOB.BLOB = mybody;
ELSE
-- there is no body
SET OutputRoot.BLOB.BLOB = NULL;
END IF; |
Enjoy  _________________ MQ & Broker admin |
|
Back to top |
|
 |
datspats |
Posted: Tue May 29, 2007 8:07 pm Post subject: |
|
|
Voyager
Joined: 12 Apr 2007 Posts: 80 Location: Mumbai
|
|
Back to top |
|
 |
datspats |
Posted: Wed May 30, 2007 6:26 am Post subject: |
|
|
Voyager
Joined: 12 Apr 2007 Posts: 80 Location: Mumbai
|
Hi,
For this case as suggested by jeff long back,to use OutputRoot.[LAST], But LAST is deprecated, Please suggest some alternaive way for solving this.
regards |
|
Back to top |
|
 |
jefflowrey |
Posted: Wed May 30, 2007 6:27 am Post subject: |
|
|
Grand Poobah
Joined: 16 Oct 2002 Posts: 19981
|
LAST has been replaced with either < or >, I forget. I think it's > _________________ I am *not* the model of the modern major general. |
|
Back to top |
|
 |
datspats |
Posted: Wed May 30, 2007 7:15 am Post subject: |
|
|
Voyager
Joined: 12 Apr 2007 Posts: 80 Location: Mumbai
|
Hi jeff,
I tried in compute node before RCD node, I think I need to check NULL condition only after the RCD(BLOB) node, But If I have trace node after RCD it shows the InputRoot.BLOB.BLOB is populated with contents of the MQRFH2 header, Does it mean that I can neven check the condition of Input message body for NULL, even the InputRoot has no messagebody before the RCD node.
regards |
|
Back to top |
|
 |
|