cancel
Showing results for 
Search instead for 
Did you mean: 

Multi mapping after container append operation gets only first message

Former Member
0 Kudos

XI environment with SP16

I have a simple integration process scenario with a container operation collecting two messages (identical).

The input to the interface mapping correctly has 0..outbounded and the map is just a java pass through. The process consists of just one receive step, two container operations, a transformation step and a async send step. The output received only contains the first

message in the collection.

Is there any obvious reason why this is happening? (I have checked and rechecked for proper types, attributes, and tested the transformation step individually.

Thanks in advance for any help.

Krish

Accepted Solutions (0)

Answers (3)

Answers (3)

Former Member
0 Kudos

Thanks for the response, guys.

The following are the properties of all the steps of the integration process.

1. Receive1 ReceivedMsg, Asynchronous, Start Process (Yes)

2. Transformation Step - Input ReceivedMsg, Target -> D2 (container variable)

3. Container Operation - ReceivedMsgColl, Append, ReceivedMsg

4. Container Operation - ReceivedMsgColl, Append, D2

5. Transformation Step 2 - IM_MULTIPASS, ReceivedMsgColl, DeliveryMsg

6. Send Step - Asynchronous, DeliveryMsg

IM_MULTIPASS

source msg (0..unbounded) MI_ABS_GENERIC (type of ReceivedMsg and DeliveryMsg)

target MI_ABS_GENERIC, mapping program: java program passthru

Regards,

Krish

justin_santhanam
Active Contributor
0 Kudos

Krish,

Your first step is receiver, fine. The next two steps are container isn't it, can u please tell the property for these two container.

Best regards,

raj.

moorthy
Active Contributor
0 Kudos

HI,

What is the outcome of Interface Mapping ? How many messages you get as a result of N:1 Transformation step..

Test this in the integration repository .. Also hope you have changed the occurence of Interface Mapping as 0..n in the source side.

Hope this helps,

Rgds,

Moorthy

Former Member
0 Kudos

I did find that when I checked the Integration Process it gave the warning:

D2 initialized in Transformation Step but not used.

D2 is used in the container operation (append to the collection).

When I test the Interface Mapping in the repository, it gave the correct result (a trivial Java passthru mapping program).

Also, when I interchange the container operations, I get ReceivedMsg or D2 (indicating that the collection is being filled properly).

The packaging of the two in the collection into a <Messages><Message1>.. envelope is not happening before the Transformation Step as is revealed by the output received.

Regards,

Krish

justin_santhanam
Active Contributor
0 Kudos

Krish,

Open the Graphical workflow log and check the container steps, and identify which container doesn't have value.

Best regards,

raj.

Former Member
0 Kudos

Raj,

There are three container variables in the above scenario: ReceivedMsg, D2 (same type as ReceivedMsg) and ReceivedMsgColl (multiline). All three have values.

D2 is basically a copy of ReceivedMsg, and the collection should containe (by virtue of two append steps) the two messages.

It is just that when I use ReceivedColl as the input to the transformation step, it only passes the first variable in the collection: Instead of getting a <Messages>..</Messages> I just get the first element of the collection.

As I had mentioned in the earlier email, if I interchange the two container operations, I get the corresponding message.

Regards,

Visva

justin_santhanam
Active Contributor
0 Kudos

Krish,

You are using two mapping programs for your sceanario, one for Source to target (source and target are same) , then N:1 Mapping( Source messages to target message) right?

Best regards,

raj.

Former Member
0 Kudos

Raj,

That is correct. The first one just maps to the same output type (except altering a string value to distinguish it), and the second one does the N:1 (which is just a java class that passes through). And I tested both of them in the repository.

Regards,

Krish

Former Member
0 Kudos

(Further to Raj's suggestion to inspect the Grpahical Workflow Log, this is the following I got:

Arithmetic operation 'RECEIVEDMSGCOLL = &D2& Append ' executed. Result: '[XC.ZXI_PROXY_MI_ABS_GENERIC_0001.1A583BC0204311DC'

Arithmetic operation 'RECEIVEDMSGCOLL = &RECEIVEDMSG& Append ' executed. Result: '[XC.ZXI_PROXY_MI_ABS_GENERIC_0001.1A583BC0204311DC')

ReceivedMsg and D2 are the two container variables being added to the collection.

In order to test whether the collection really contains the two messages, I alternately used the parameter to the Send step as ReceivedMsgColl[1] and ReceivedMessageColl[2] respectively. It correctly sends the first and second elements of the collection.

Therefore we can conclude that the input to the transformation step (Collection containing two messages) does not come in as a multi message. Once again, I checked if the Occurrence in Interface Mapping is 0..unbounded, and unit tested it.

Regards,

Krish

henrique_pinto
Active Contributor
0 Kudos

Hey Krish,

Make sure you have 0...unbounded ocurrence for the source message in both Interface Mapping and Message Mapping of the mapping contained in the Transformation Step.

To change the occurrence of the message types in Message Mapping, you have to go to the 3rd tab.

Regards,

Henrique.

Former Member
0 Kudos

Hi Henrique,

Thanks for your response.

I did have 0..unbounded in the source message settings. (I did see the <Messsages>.. wrapper in the Test tab and in fact it works ok if we use Message Mapping (in my case where multiple messages are of the same type). However, when I have multiple (different) type messages, I got a Mapping..BaseruntimeException even though it worked ok during unit test.

Now, if I have a Java mapping, it clearly does not pass multiple messages (with 0..unbounded in interface mapping for source). I only get the first in the collection.

I have a feeling that XI does not do any preprocessing in the case of Java mapping step (including the wrapping of multiple messages). If that is true, then it is a bug.

Another thing: when I have different type of messages as input - not a collection but distinct message types in the interface mapping - and if I have Java mapping, then I get an error "No Message interface defined for parameter 2" in the workflow log. But I am more concerned with why it does not wrap multiple messages and pass it to the java mapping transformation step.

Regards,

Krish