IBM webMethods Hybrid Integration

IBM webMethods Hybrid Integration

Join this online group to communicate across IBM product users and experts by sharing advice and best practices with peers and staying up to date regarding product enhancements.

 View Only
  • 1.  unbounded array inside an unbounded array

    Posted Mon January 06, 2014 02:05 PM

    I have an issue where I have an unbounded array (Array 1) inside of another unbounded array (Array 2).

    Array 1 is fine in every scenario. And as long as every item in Array 1 has the exact same number of items inside of Array 2 I am also ok.
    Example of one that works fine

    John555555554444444
    Jane6666666677777777

    My problem comes when items in array 1 have differing numbers of items in array 2. For example see below where only one person is array as 2 phones and the other has 1 phone.

    John555555554444444
    Jane66666666

    Again Array 1 is fine but Array 2 is where is breaks. I can see the issue in my Integration Server logs and it appears in this case the EntireX data marshaller is not sure how to react and sees the phonelist as being NULL for each Person in Array 1.

    I am still reading through some documentation to try and find an answer but we are in a hurry to get this resolved so I thought I would ask for help as well.

    I am on Integration Server 8.2.1 Fix 4. EntireX adapter version 8.2.1.0.79.

    Thanks

    Joe


    #Mainframe-Integration
    #webMethods
    #EntireX


  • 2.  RE: unbounded array inside an unbounded array

    Posted Mon January 06, 2014 08:36 PM
    1. can you post your IDL?
    2. what error are you getting?
    3. did you modify any of the XML Mapping options?
    4. who’s calling what? That is, is the mainframe (Natural? COBOL??) calling IS or is IS calling mainframe RPC service? if so, what are the versions of the mainframe components (RPC server, Natural)?

    #webMethods
    #Mainframe-Integration
    #EntireX


  • 3.  RE: unbounded array inside an unbounded array

    Posted Tue January 07, 2014 10:42 AM

    I went with a more simple example for explanation purposes above but to answer some of your questions I am going to have to revert back to using the real transactions.

    Natural and RPC Server info
    In one environment we are running NAT V8231, Natural RPC Server V8231 on MVS/ESA
    In one environment we are running NAT V4263, Natural RPC Server V633 on MVS/ESA
    Both environment have the same issue.

    IDL from transaction
    1 I00080N1-IN
    2 EOB-INFORMATION
    3 CLAIM-NUM (A10)
    3 POL-NUM (A10)
    3 USER-ID (A3)
    3 LINE-INFORMATION-CNT (I4)
    3 LINE-INFORMATION (/1:V)
    4 FROM-DATE (D)
    4 TO-DATE (D)
    4 OTHER-INCOME-CNT (I4)
    4 OTHER-INCOME (/1:V)
    5 OTHER-INCOME-SOURCE-CODE (A4)
    5 OTHER-INCOME-AMT (N9.2)

    Using this transaction LINE-INFORMATION is always ok. OTHER-INCOME is the one that gets nulled when there is not a consistent number of them on each instance of LINE-INFORMATION. (If there are 2 OTHER-INCOME’s on every LINE-INFORMATION then we are ok. If there are 2 OTHER-INCOME’s on one LINE-INFORMATION and 1 OTHER-INCOME’s on the rest of the LINE-INFORMATIONs, then we get null in all OTHER-INCOME elements.)

    There is no error. I can just see in the logs that the values that were passed in are being seen/interpreted as null.
    Log examples can been viewed below this message.

    Have not modified any XML mapping. IS is calling the mainframe (Natural). When I debug I can see the values being mapped properly from Flow input to the adapter input but can see the null occuring in the logs. There is not an error thrown during execution only noticed due to missing data on the mainframe. Then came to the logs to track the data and noticed this issue. I have also found other transaction that have the same structure of a dynamic array inside a dynamic array and ran tests on them. They are also experiencing it so it is more than just this one instance of the problem.

    Let me know if I can provide anything else or if you have any ideas. Appreciate any time you have for me on this. Thank you.

    Joe

    Failed example:
    2014-01-06 10:14:18 [ADA.0800.0444I] WmEntireX: IDataMarshaller: getValue(>>>BasicData:FROM-DATE=Jul 31, 2013,TO-DATE=Aug 20, 2013, OTHER-INCOME-CNT=2<<<, OTHER-INCOME) = null

    2014-01-06 10:14:18 [ADA.0800.0444I] WmEntireX: IDataMarshaller: createValue(>>>BasicData:FROM-DATE=Jun 29, 2013,TO-DATE=Jul 5, 2013<<<, OTHER-INCOME-CNT, 2
    2014-01-06 10:14:18 [ADA.0800.0444I] WmEntireX: IDataMarshaller: createStructureHandle()
    2014-01-06 10:14:18 [ADA.0800.0444I] WmEntireX: IDataMarshaller: createValue(>>>BasicData:<<<, OTHER-INCOME-SOURCE-CODE,
    2014-01-06 10:14:18 [ADA.0800.0444I] WmEntireX: IDataMarshaller: createValue(>>>BasicData:OTHER-INCOME-SOURCE-CODE=<<<, OTHER-INCOME-AMT, 0.00
    2014-01-06 10:14:18 [ADA.0800.0444I] WmEntireX: IDataMarshaller: createStructureHandle()
    2014-01-06 10:14:18 [ADA.0800.0444I] WmEntireX: IDataMarshaller: createValue(>>>BasicData:<<<, OTHER-INCOME-SOURCE-CODE,
    2014-01-06 10:14:18 [ADA.0800.0444I] WmEntireX: IDataMarshaller: createValue(>>>BasicData:OTHER-INCOME-SOURCE-CODE=<<<, OTHER-INCOME-AMT, 0.00

    Good Example
    2014-01-06 10:13:47 [ADA.0800.0444I] WmEntireX: IDataMarshaller: getValue(>>>BasicData:FROM-DATE=Jul 31, 2013,TO-DATE=Aug 20, 2013,OTHER-INCOME-CNT=2,OTHER-INCOME=[0]>>>BasicData:OTHER-INCOME-SOURCE-CODE=UI,OTHER-INCOME-AMT=1000<<<,[1]>>>BasicData:OTHER-INCOME-SOURCE-CODE=OD,OTHER-INCOME-AMT=800<<<<<<, OTHER-INCOME) = [Lcom.wm.data.IData;@6a57183c
    2014-01-06 10:13:47 [ADA.0800.0444I] WmEntireX: IDataMarshaller: getValue(>>>BasicData:OTHER-INCOME-SOURCE-CODE=UI,OTHER-INCOME-AMT=1000<<<, OTHER-INCOME-SOURCE-CODE) = UI
    2014-01-06 10:13:47 [ADA.0800.0444I] WmEntireX: IDataMarshaller: getValue(>>>BasicData:OTHER-INCOME-SOURCE-CODE=UI,OTHER-INCOME-AMT=1000<<<, OTHER-INCOME-AMT) = 1000
    2014-01-06 10:13:47 [ADA.0800.0444I] WmEntireX: IDataMarshaller: getValue(>>>BasicData:OTHER-INCOME-SOURCE-CODE=OD,OTHER-INCOME-AMT=800<<<, OTHER-INCOME-SOURCE-CODE) = OD
    2014-01-06 10:13:47 [ADA.0800.0444I] WmEntireX: IDataMarshaller: getValue(>>>BasicData:OTHER-INCOME-SOURCE-CODE=OD,OTHER-INCOME-AMT=800<<<, OTHER-INCOME-AMT) = 800
    2014-01-06 10:13:47 [ADA.0800.0444I] WmEntireX: IDataMarshaller: createValue(>>>BasicData:FROM-DATE=Jul 31, 2013,TO-DATE=Aug 20, 2013<<<, OTHER-INCOME-CNT, 2
    2014-01-06 10:13:47 [ADA.0800.0444I] WmEntireX: IDataMarshaller: createStructureHandle()
    2014-01-06 10:13:47 [ADA.0800.0444I] WmEntireX: IDataMarshaller: createValue(>>>BasicData:<<<, OTHER-INCOME-SOURCE-CODE, UI
    2014-01-06 10:13:47 [ADA.0800.0444I] WmEntireX: IDataMarshaller: createValue(>>>BasicData:OTHER-INCOME-SOURCE-CODE=UI<<<, OTHER-INCOME-AMT, 1000.00
    2014-01-06 10:13:47 [ADA.0800.0444I] WmEntireX: IDataMarshaller: createStructureHandle()
    2014-01-06 10:13:47 [ADA.0800.0444I] WmEntireX: IDataMarshaller: createValue(>>>BasicData:<<<, OTHER-INCOME-SOURCE-CODE, OD
    2014-01-06 10:13:47 [ADA.0800.0444I] WmEntireX: IDataMarshaller: createValue(>>>BasicData:OTHER-INCOME-SOURCE-CODE=OD<<<, OTHER-INCOME-AMT, 800.00


    #EntireX
    #Mainframe-Integration
    #webMethods


  • 4.  RE: unbounded array inside an unbounded array

    Posted Thu January 09, 2014 06:17 AM

    Hello Joe,

    according to the log the IS flow simply does not pass any value for OTHER-INCOME. That’s the reason why it is null:

    getValue(>>>BasicData:FROM-DATE=Jul 31, 2013,TO-DATE=Aug 20, 2013, OTHER-INCOME-CNT=2<<<, OTHER-INCOME)


    #webMethods
    #Mainframe-Integration
    #EntireX


  • 5.  RE: unbounded array inside an unbounded array

    Posted Thu January 09, 2014 10:34 AM

    But the value is there and it is being passed. I can see it in the web service call I am performing, in the SOAP log entry (if I select SOAP as logging option), and in flow debug mode I can see it properly written to the input document of the adapter. The first location where I can see that something has not occurred as expected is in the WmEntireX: IDataMarshaller: log entries.

    The only thing that is different on my good example and bad example is the fact that on the good examples there were always 2 OTHER-INCOME for each LINE-INFORMATION…On the bad there is a random number of OTHER-INCOME for each LINE-INFORMATION.

    This works:

    
    <EOBInformation>
    <ClaimNumber>3333333</ClaimNumber>
    <PolicyNumber>444444</PolicyNumber>
    <UserId>1</UserId>
    <LineInformationCount>3</LineInformationCount>
    <DisabilityLineInformationList>
    <DisabilityLineInformation>
    <FromDate>2013-06-29T00:00:00</FromDate>
    <ToDate>2013-07-05T00:00:00</ToDate>
    <OtherIncomeCount>2</OtherIncomeCount>
    <OtherIncomeList>
    <OtherIncome>
    <OtherIncomeSourceCode>12</OtherIncomeSourceCode>
    <OtherIncomeAmount>800</OtherIncomeAmount>
    </OtherIncome>
    <OtherIncome>
    <OtherIncomeSourceCode>12</OtherIncomeSourceCode>
    <OtherIncomeAmount>800</OtherIncomeAmount>
    </OtherIncome>
    </OtherIncomeList>
    </DisabilityLineInformation>
    <DisabilityLineInformation>
    <FromDate>2013-07-06T00:00:00</FromDate>
    <ToDate>2013-07-07T00:00:00</ToDate>
    <OtherIncomeCount>2</OtherIncomeCount>
    <OtherIncomeList>
    <OtherIncome>
    <OtherIncomeSourceCode>12</OtherIncomeSourceCode>
    <OtherIncomeAmount>800</OtherIncomeAmount>
    </OtherIncome>
    <OtherIncome>
    <OtherIncomeSourceCode>12</OtherIncomeSourceCode>
    <OtherIncomeAmount>800</OtherIncomeAmount>
    </OtherIncome>
    </OtherIncomeList>
    </DisabilityLineInformation>
    <DisabilityLineInformation>
    <FromDate>2013-07-06T00:00:00</FromDate>
    <ToDate>2013-07-07T00:00:00</ToDate>
    <OtherIncomeCount>2</OtherIncomeCount>
    <OtherIncomeList>
    <OtherIncome>
    <OtherIncomeSourceCode>12</OtherIncomeSourceCode>
    <OtherIncomeAmount>800</OtherIncomeAmount>
    </OtherIncome>
    <OtherIncome>
    <OtherIncomeSourceCode>12</OtherIncomeSourceCode>
    <OtherIncomeAmount>800</OtherIncomeAmount>
    </OtherIncome>
    </OtherIncomeList>
    </DisabilityLineInformation>
    </EOBInformation>

    This produces the issue:

    
    <EOBInformation>
    <ClaimNumber>3333333</ClaimNumber>
    <PolicyNumber>444444</PolicyNumber>
    <UserId>1</UserId>
    <LineInformationCount>3</LineInformationCount>
    <DisabilityLineInformationList>
    <DisabilityLineInformation>
    <FromDate>2013-06-29T00:00:00</FromDate>
    <ToDate>2013-07-05T00:00:00</ToDate>
    <OtherIncomeCount>1</OtherIncomeCount>
    <OtherIncomeList>
    <OtherIncome>
    <OtherIncomeSourceCode>12</OtherIncomeSourceCode>
    <OtherIncomeAmount>800</OtherIncomeAmount>
    </OtherIncome>
    </OtherIncomeList>
    </DisabilityLineInformation>
    <DisabilityLineInformation>
    <FromDate>2013-07-06T00:00:00</FromDate>
    <ToDate>2013-07-07T00:00:00</ToDate>
    <OtherIncomeCount>2</OtherIncomeCount>
    <OtherIncomeList>
    <OtherIncome>
    <OtherIncomeSourceCode>12</OtherIncomeSourceCode>
    <OtherIncomeAmount>800</OtherIncomeAmount>
    </OtherIncome>
    <OtherIncome>
    <OtherIncomeSourceCode>12</OtherIncomeSourceCode>
    <OtherIncomeAmount>800</OtherIncomeAmount>
    </OtherIncome>
    </OtherIncomeList>
    </DisabilityLineInformation>
    <DisabilityLineInformation>
    <FromDate>2013-07-06T00:00:00</FromDate>
    <ToDate>2013-07-07T00:00:00</ToDate>
    <OtherIncomeCount>1</OtherIncomeCount>
    <OtherIncomeList>
    <OtherIncome>
    <OtherIncomeSourceCode>12</OtherIncomeSourceCode>
    <OtherIncomeAmount>800</OtherIncomeAmount>
    </OtherIncome>
    </OtherIncomeList>
    </DisabilityLineInformation>
    </EOBInformation>

    #webMethods
    #EntireX
    #Mainframe-Integration


  • 6.  RE: unbounded array inside an unbounded array

    Posted Thu January 09, 2014 11:18 AM

    You should invoke pub.flow:savePipelineToFile before calling the adapter service to check the pipeline which is passed to the adapter service.

    BTW you mention that you are using version 8.2.1.0.79 of the EntireX Adapter which is a very old unsupported version. You should upgrade to a more recent version.


    #webMethods
    #Mainframe-Integration
    #EntireX


  • 7.  RE: unbounded array inside an unbounded array

    Posted Fri January 10, 2014 11:23 AM

    Thanks for the advice Rolf…

    I checked the pipeline and I can still see the data, and I can see it when I debug being copied properly to the adapter. If there was a pipeline issue I would think my problem would exist in all scenarios not just when I have a non-constant number of elements in the interior array.

    We are in the beginning stages of moving to 9 but I do have a test 8.2.2 version (which we have now decided to skip) still stood up here so I started it up to test and it is running EntireX 8.2.2.3.94 4 Jul 2012 14:19:00 . It has the same issue.

    I have found that if I send the same number of OtherIncome tags using empty tags on the ones that have less elements then I can make it work (example below). Would prefer to not have to do that though.

    
    <EOBInformation>  
    <ClaimNumber>3333333</ClaimNumber>  
    <PolicyNumber>444444</PolicyNumber>  
    <UserId>1</UserId>  
    <LineInformationCount>3</LineInformationCount>  
    <DisabilityLineInformationList>  
    <DisabilityLineInformation>  
    <FromDate>2013-06-29T00:00:00</FromDate>  
    <ToDate>2013-07-05T00:00:00</ToDate>  
    <OtherIncomeCount>1</OtherIncomeCount>  
    <OtherIncomeList>  
    <OtherIncome>  
    <OtherIncomeSourceCode>12</OtherIncomeSourceCode>  
    <OtherIncomeAmount>800</OtherIncomeAmount>  
    </OtherIncome>  
    <OtherIncome>  
    <OtherIncomeSourceCode></OtherIncomeSourceCode>  
    <OtherIncomeAmount></OtherIncomeAmount>  
    </OtherIncome>  
    </OtherIncomeList>  
    </DisabilityLineInformation>  
    <DisabilityLineInformation>  
    <FromDate>2013-07-06T00:00:00</FromDate>  
    <ToDate>2013-07-07T00:00:00</ToDate>  
    <OtherIncomeCount>2</OtherIncomeCount>  
    <OtherIncomeList>  
    <OtherIncome>  
    <OtherIncomeSourceCode>12</OtherIncomeSourceCode>  
    <OtherIncomeAmount>800</OtherIncomeAmount>  
    </OtherIncome>  
    <OtherIncome>  
    <OtherIncomeSourceCode>12</OtherIncomeSourceCode>  
    <OtherIncomeAmount>800</OtherIncomeAmount>  
    </OtherIncome>  
    </OtherIncomeList>  
    </DisabilityLineInformation>  
    <DisabilityLineInformation>  
    <FromDate>2013-07-06T00:00:00</FromDate>  
    <ToDate>2013-07-07T00:00:00</ToDate>  
    <OtherIncomeCount>1</OtherIncomeCount>  
    <OtherIncomeList>  
    <OtherIncome>  
    <OtherIncomeSourceCode>12</OtherIncomeSourceCode>  
    <OtherIncomeAmount>800</OtherIncomeAmount>  
    </OtherIncome>  
    <OtherIncome>  
    <OtherIncomeSourceCode></OtherIncomeSourceCode>  
    <OtherIncomeAmount></OtherIncomeAmount>  
    </OtherIncome>  
    </OtherIncomeList>  
    </DisabilityLineInformation>  
    </EOBInformation>  

    #Mainframe-Integration
    #webMethods
    #EntireX


  • 8.  RE: unbounded array inside an unbounded array

    Posted Mon January 13, 2014 07:55 AM

    This might also be something unexpected (or something going wrong) on the Natural side.
    If you need further assistance I suggest to open a support request.


    #webMethods
    #EntireX
    #Mainframe-Integration