ASG
IBM
Zystems
Cressida
Icon
Netflexity
 
  MQSeries.net
Search  Search       Tech Exchange      Education      Certifications      Library      Info Center      SupportPacs      LinkedIn  Search  Search                                                                   FAQ  FAQ   Usergroups  Usergroups
 
Register  ::  Log in Log in to check your private messages
 
RSS Feed - WebSphere MQ Support RSS Feed - Message Broker Support

MQSeries.net Forum Index » WebSphere Message Broker (ACE) Support » FileInput Parsed Record Sequence & failure

Post new topic  Reply to topic
 FileInput Parsed Record Sequence & failure « View previous topic :: View next topic » 
Author Message
pomeroy8
PostPosted: Tue May 13, 2008 11:09 am    Post subject: FileInput Parsed Record Sequence & failure Reply with quote

Novice

Joined: 25 Jun 2001
Posts: 21
Location: Markham, ON Canada

I would like to use the FileInput node with "Parsed Record Sequence". I have created my msgset and msgflow. I have set the FileInput node validation to "Content and Value".

I want all successfully parsed messages to flow into my compute node etc. I want all unsuccessfully parsed messages to go to a "reject" process and to continue processing next parsed message. I have set the failure action on the validation to be "Local Error Log" which according to help is supposed to "continue regardless of validation failures". I have wired the failure terminal of the FileInput node to a "reject" process that currently does nothing (Compute node that returns FALSE). When I pass bad data into the FileInput node, the messages up to the bad data are output to my MOOutput node, however, the processing stops and the file is written to the mqsibackout folder.

How do I achieve a flow that will process the entire filw with all the valid parsed messages and reject the invalid parsed messages?

Thanks in advance.
Back to top
View user's profile Send private message
kimbert
PostPosted: Tue May 13, 2008 1:53 pm    Post subject: Reply with quote

Jedi Council

Joined: 29 Jul 2003
Posts: 5542
Location: Southampton

Quote:
How do I achieve a flow that will process the entire filw with all the valid parsed messages and reject the invalid parsed messages?
First, you need to define 'valid' and 'invalid'.
Bear in mind that some forms of 'invalid' message could cause the parsing of more than one message to fail ( because the parser might run on into the next message, or even to the end of the file ).
Quote:
When I pass bad data into the FileInput node, the messages up to the bad data are output to my MOOutput node, however, the processing stops and the file is written to the mqsibackout folder.
Take a user trace and look at it carefully. It might contain a clue about why the parser is acting strangely. I would guess that you are getting parsing errors, not validation errors. You can't suppress parsing errors.
Back to top
View user's profile Send private message
pomeroy8
PostPosted: Wed May 14, 2008 4:51 am    Post subject: Reply with quote

Novice

Joined: 25 Jun 2001
Posts: 21
Location: Markham, ON Canada

Interest. You just made me realize that I don't really have a clear understanding of how WMB or I interpret "valid" or "invalid". Is there a concise definition for WMB?

To your first point, the "bad" data is actually near the beginning of the message not the end. It's unlikely that the error is due to runnning into the next message. The message set is TaggedFixedLength. The "bad" data is in the first of the tagged records.

The "bad" data consists of having a string where an integer was expected.

Thanks, I'll look at the trace.
Back to top
View user's profile Send private message
kimbert
PostPosted: Wed May 14, 2008 10:39 am    Post subject: Reply with quote

Jedi Council

Joined: 29 Jul 2003
Posts: 5542
Location: Southampton

Quote:
I don't really have a clear understanding of how WMB or I interpret "valid" or "invalid". Is there a concise definition for WMB?
The MRM parser issues a parsing exception when one of the following occurs:
- It runs out of bitstream before encountering the end of the model
- It runs out of model before encountering the end of the bitstream
- It cannot convert the physical data ( bytes/characters) to the logical type defined in the message definition. ( e.g. 'xyz' cannot be converted to a float )
- It encounters a character conversion exception while transoding from the input code page to the broker's native UTF16.
etc

A validation exception is issed if validation is enabled and
- minOccurs or maxOccurs is violated
- A type or group contains undeclared members ( unless Content Validation is set to Open or Open Defined ).
- A simple value does not obey the Value Constraints ( schema facets ) on its simple type.
etc

Most XML validating parsers don't make that distinction, so a lot of people don't expect the MRM parser to make it either.
Back to top
View user's profile Send private message
pomeroy8
PostPosted: Thu May 15, 2008 10:33 am    Post subject: Reply with quote

Novice

Joined: 25 Jun 2001
Posts: 21
Location: Markham, ON Canada

Thanks. Based on your definitions I have a parser error. (had to do "real" work yesterday sorry for the delay responding).

I change the FileInput node to parse "onDemand". However, I left validation to "Content and Value".

Now when I send the "bad" data. The initial "good" messages are processed to the output queue. on the "bad" message initially the flow just seemed to end. The file was deleted. I changed the "Action on successful processing" to "Add timestamp ..." Now the file goes to the mqsiarchive folder.

This seems to indicate that the file was processed correctly even though it was not.

Quote:
You can't suppress parsing errors.


This seems to me to be a FUNDAMENTAL deficiency with FileInput node. A simple scenario is that I receive files from different suppliers with varying levels of data quality/integrity. I still need to process all the "good" messages a supplier sends me (perhaps so that they can get paid) and I need to reject the "bad" messages.

If I can't suppress parsing errors then:

    how useful is the failure terminal on fileInput node? this is how we would handle parser errors for MQInput

    how am I supposed to achieve my business requirement to reject "bad" data?


Thank you for your input/time thus far. We really had high expectations that WMB v6.1 file nodes would be the answer here. I don't want to have to go back and say, "No, we need to buy/build our own adapter".
Back to top
View user's profile Send private message
jefflowrey
PostPosted: Thu May 15, 2008 10:44 am    Post subject: Reply with quote

Grand Poobah

Joined: 16 Oct 2002
Posts: 19981

Suppose you receive a file that starts off with 100 good records.

It then includes a single, incorrect, file termination character, and then a long string of other characters that may or may not represent "good records".

In what manner is the FileInput node supposed to be able to determine what to do, after reading the file termination character?

Or indeed, any other character that does not actually match the model you've told it to use.

Or suppose that you receive a file that has a single extra character (perhaps the letter 'a') as the very first character. Every other byte of the file is absolutely correct and consistent with your model. How many bad records are there in this file? how many good records?

These are not random, abstract, questions. These are questions that you need to consider when dealing with your specific problem, and determine what your specific exception handling requirements and procedures are. Then you can look at how to use the FileInput node to implement these.
_________________
I am *not* the model of the modern major general.
Back to top
View user's profile Send private message
pomeroy8
PostPosted: Thu May 15, 2008 12:30 pm    Post subject: Reply with quote

Novice

Joined: 25 Jun 2001
Posts: 21
Location: Markham, ON Canada

Thanks for your input. You make some valid points, however, as is the FileInput node provides NO OPTION to deal with these in my flow.

Of course, it is impossible to guard against all possible ways a file can be incorrect or corrupted.

The assumption is that the FileInput node, with ParedRecordSequence, was able to find a message. I want to determine if the message is "good" or "bad". If its "good" then fine. If its "bad" what can I do? MQInput nodes have a Failure terminal that allows me to do something useful with a "bad" message and keep processing the queue. How can I keep processing the file given my assumption that ParsedRecordSequence will find a message? The Failure terminal of the FileInput node seems the logical choice, however, apparently you can't suppress parser errors which makes its usefulness suspect/misleading.

I could read the file a record at a time and build the message in a Compute node which would PROPAGATE a complete message. I would have the parsing to a later step. This approach requires more code on my part (always bad) compared to using the ParsedRecordSequence approach.

Finally, I need a new (custom) file adapter. Why should I buy/build one when I already have one that is supported by my vendor?
Back to top
View user's profile Send private message
jefflowrey
PostPosted: Thu May 15, 2008 2:46 pm    Post subject: Reply with quote

Grand Poobah

Joined: 16 Oct 2002
Posts: 19981

You can use the FileInput node in several modes, at least some of which, as is, will let you deal with your file in the way you want to.

For example, in a fixed length way to dump unparsed "records" onto a queue, where you can then parse, validate, backout, deal with them, etc.

Or for example as a single output message representing the entire file, where you can then use SUBSTRING and CREATE FIELD...PARSE to deal with your structures, and deal with your errors as you like.

It may not be that the FileInput node, as delivered in 6.1.0.1, does exactly and explicitly what you want it to out of the box. That doesn't mean that it won't in 6.1.0.2, or in later time frames either. Nor does it mean that, out of the box at 6.1.0.1 there is not a solution for your problem with Broker - that may require more than just a single FileInput node.
_________________
I am *not* the model of the modern major general.
Back to top
View user's profile Send private message
kimbert
PostPosted: Fri May 16, 2008 12:46 am    Post subject: Reply with quote

Jedi Council

Joined: 29 Jul 2003
Posts: 5542
Location: Southampton

Quote:
Based on your definitions I have a parser error
Can you quote the BIP number please. I would like to understand the problem that you are facing.
Back to top
View user's profile Send private message
pomeroy8
PostPosted: Fri May 16, 2008 6:25 am    Post subject: Reply with quote

Novice

Joined: 25 Jun 2001
Posts: 21
Location: Markham, ON Canada

@ kimbert

there were NO ERRORS in the Windows Event Application log!! After the failure, the file went into the mqsiarchive folder (hmm....?).

I did, however, grab the following from the debugger.

Code:
Message   
   Properties   
      MessageSet   IA106_TAGGEDDELIMITED_MSP   
      MessageType   {}:InvoiceGroups   
      MessageFormat   TDS1   
      Encoding   546   
      CodedCharSetId   437   
      Transactional   false   
      Persistence   false   
      CreationTime   2008-05-16 14:10:26.875   
      ExpirationTime   -1   
      Priority   0   
      ReplyIdentifier   
      ReplyProtocol   
      Topic   
      ContentType   
      IdentitySourceType   
      IdentitySourceToken   
      IdentitySourcePassword   
      IdentitySourceIssuedBy   
      IdentityMappedType   
      IdentityMappedToken   
      IdentityMappedPassword   
      IdentityMappedIssuedBy   
   MRM   
      ECHeaderRecord   
         SenderId   5195795736        
         ReceiverId   201613668         
         ANSITransactionType   810        
LocalEnvironment   
   File   
   Wildcard   
Environment   
ExceptionList   
   RecoverableException   
      File   F:\build\S000_P\src\DataFlowEngine\ImbDataFlowNode.cpp   
      Line   739   
      Function   ImbDataFlowNode::createExceptionList   
      Type   ComIbmTryCatchNode   
      Name   IA106_FILE_IN_XML_OUT#FCMComposite_1_3   
      Label   IA106_FILE_IN_XML_OUT.TryCatch   
      Catalog   BIPv610   
      Severity   3   
      Number   2230   
      Text   Node throwing exception   
      RecoverableException   
         File   F:\build\S000_P\src\DataFlowEngine\ImbMqOutputNode.cpp   
         Line   894   
         Function   ImbMqOutputNode::evaluate   
         Type   ComIbmMQOutputNode   
         Name   IA106_FILE_IN_XML_OUT#FCMComposite_1_5   
         Label   IA106_FILE_IN_XML_OUT.IA106_XML_OUT   
         Catalog   BIPv610   
         Severity   3   
         Number   2230   
         Text   Caught exception and rethrowing   
         ParserException   
            File   F:\build\S000_P\src\MTI\MTIforBroker\MtiImbParser2\MtiImbParser.cpp   
            Line   1865   
            Function   MtiImbParser::refreshBitStreamFromElements - 9 par   
            Type   ComIbmFileInputNode   
            Name   IA106_FILE_IN_XML_OUT#FCMComposite_1_2   
            Label   IA106_FILE_IN_XML_OUT.IA106_PARSE_FILE_IN   
            Catalog   BIPv610   
            Severity   3   
            Number   5286   
            Text   ImbRecoverableException caught from worker when attempting to write out the bitstream.   
            Insert   
               Type   5   
               Text   IA106_TAGGEDDELIMITED_MSP   
            Insert   
               Type   2   
               Text   1   
            Insert   
               Type   5   
               Text   XML1   
            Insert   
               Type   5   
               Text   /InvoiceGroups   
            ParserException   
               File   F:\build\S000_P\src\MTI\MTIforBroker\MtiImbParser2\MtiImbParser.cpp   
               Line   4061   
               Function   MtiImbParser::checkSeqForMissingMandatories   
               Type   ComIbmFileInputNode   
               Name   IA106_FILE_IN_XML_OUT#FCMComposite_1_2   
               Label   IA106_FILE_IN_XML_OUT.IA106_PARSE_FILE_IN   
               Catalog   BIPv610   
               Severity   3   
               Number   5374   
               Text   An element has been deemed complete occurring less than specified minOccurs   
               Insert   
                  Type   5   
                  Text   InvoiceHeaderRecord   
               Insert   
                  Type   2   
                  Text   0   
               Insert   
                  Type   2   
                  Text   1   
               Insert   
                  Type   5   
                  Text   InvoiceGroups   
               Insert   
                  Type   2   
                  Text   1   


So its a BIP2230.
Back to top
View user's profile Send private message
pomeroy8
PostPosted: Fri May 16, 2008 6:36 am    Post subject: Reply with quote

Novice

Joined: 25 Jun 2001
Posts: 21
Location: Markham, ON Canada

@ jefflowrey

Quote:
For example, in a fixed length way to dump unparsed "records" onto a queue, where you can then parse, validate, backout, deal with them, etc.


I had already written something similar to this in order to write the contents of a FileInput node into an MQ group of messages. This was my scenario where all the messages had to be "good" in order to continue processing. I was disappointed that the FileInput node as is did not support MQ grouping, however, I can see that the file parser is not "looking ahead". In this case, I did not write any code to "backout, deal with them, etc." as this was not the purpose of the test. I was satisfied that the incomplete group was sufficient to prevent down stream processing.

Given my recent problems, I will have to revisit this, to validate that the files are going into the correct folders after processing. If they are going to the mqsiarchive folder, then, I would say we have a problem.
Back to top
View user's profile Send private message
pomeroy8
PostPosted: Fri May 16, 2008 7:15 am    Post subject: Reply with quote

Novice

Joined: 25 Jun 2001
Posts: 21
Location: Markham, ON Canada

@ kimbert

More testing ...

I had a TryCatch node between the FileInput node and a Compute node. The catch terminal was wired to a Compute node that did nothing (IEFBR14 for us old guys) (RETURN FALSE). When I removed the TryCatch node, now the file goes into the mqsibackout folder. There are messages in the Application Event Log

If I restore the TryCatch node and ADD a Throw after my IEFBR14 the file goes to the mqsiarchive folder. NO messages in the Application Event Log.

In neither case have I wired the failure terminal of the FileInput node.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic  Reply to topic Page 1 of 1

MQSeries.net Forum Index » WebSphere Message Broker (ACE) Support » FileInput Parsed Record Sequence & failure
Jump to:  



You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
Protected by Anti-Spam ACP
 
 


Theme by Dustin Baccetti
Powered by phpBB © 2001, 2002 phpBB Group

Copyright © MQSeries.net. All rights reserved.