Pages

Showing posts with label Mediator. Show all posts
Showing posts with label Mediator. Show all posts

The order of the assign and transform in the Mediator

In my previous blogpost I pointed out the usage of an assign in a mediator component. This can be useful over the transform in several cases. Besides using one of the two, it is also possible to use them both in the same route. I would not advise using both the assign and the transform to manipulate the same data object, however this is possible.

If you want to do this, it is good to keep in mind in which order the mediator handles the manipulations. I used the same example from the previous blogpost and added an transformation in the mediator.

In the transform, I copy the firstname from the input, to the lastname of the output:
 

Resulting in both a transform and an assign in the mediator:
 

I deployed the service to the Enterprise Manager and will fire the following test:
 

The response already clarifies what happened here, the transform is fired first and only after the transform is done, the assign is being processed, because the input is the same as the output:
 

However, to verify this assumption, we will have a closer look at the flow trace, in the flow trace, we open the instance of the mediator:
 

In here we can clearly see that the xsl transformation is done before the assign.
Keep this in mind when you want to use both the transform as well as the assign option on the same data object in the mediator.


Use the assign instead of a transform in the Mediator

When building less complex services, your BPEL process often uses input and output that is pretty much like the request and response on the wsdl. We would still want to decouple using the mediator component, so there is an extra transformation there which is pretty straight forward.
Sometimes it can be useful, easier and faster to use a assign in the mediator instead of a transform.

Imagine an pretty straight forward xsd:


I created an example BPEL process, also pretty straight forward. The Person is both the input and the output, all the BPEL process does is copy the input to the output and reply it:
 

In the Create Web Service dialog we create a WSDL based on the same XSD, also with a Person as input and output:

As said, because of decoupling, we would still want to have a mediator between the exposed service and our bpel process. We create a mediator and wire it both to the service and to the bpel process.
However, when editing the route, we usually use a transformation to map the input to the output, in this case, we are going to use an assign:

When you click the assign button, this also pop ups and Assign Values dialog, here we can wire the input element to the output element:

This way we use an assign in the mediator instead of creating an xsl transformation for this pretty straight forward transformation.