Skip to Content

Recently we had a requirement where we need to perform a look up for a rest service to obtain the token and then include the same in the future requests.

I did not find any document for REST look up in PI , so thought to create a new one so that it can help others.

For this document, I have used the below rest api

This service takes zip code as json input and returns status and result in json format.

So like other look up first thing we need to do is to create a new communication channel with type REST in ID




Notice we have used a variable parameter {req_zipcode} in the URL.The value of this parameter will be fetched from the input xml message which we will be passing during the look up.

In the xpath expression we have used the value as //zipcode. So in the input xml there has to be a field with the name zipcode. Below is our input xml


Rest Operation tab:


Data Format tab:


Our input is xml but the service expects json so we have to choose the option ‘Convert XML Payload To JSON’.

Similarly the service will return the output as JSON. So we have to choose the option ‘Convert to XML’. Also we need to select the ‘Add Wrapper Element’.

The final output in xml format will look like below


Communication channel is ready now. Next we need to create source and target structure in ESR





Java Mapping Code:

package com.test;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class RestLookInPI extends AbstractTransformation {
  public void transform(TransformationInput arg0, TransformationOutput arg1)
  throws StreamTransformationException {
  this.execute(arg0.getInputPayload().getInputStream(), arg1
  }// end of transform
  public void execute(InputStream in, OutputStream out)
  throws StreamTransformationException {
  try {
  String status = "";
  // generate the input xml for rest look up
  String loginxml =  "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<zipcode>10001</zipcode>";
  //perform the rest look up
  Channel channel = LookupService.getChannel("BC_468470_Receiver","CC_Rest_Rcv");
  SystemAccessor accessor = null;
  accessor = LookupService.getSystemAccessor(channel);
  InputStream inputStream = new ByteArrayInputStream(loginxml.getBytes());
  Payload payload = LookupService.getXmlPayload(inputStream);
  Payload SOAPOutPayload = null;
  SOAPOutPayload =;
  InputStream inp = SOAPOutPayload.getContent();
  DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
  DocumentBuilder builder = factory.newDocumentBuilder();
  Document document = builder.parse(inp);
  NodeList stats = document.getElementsByTagName("status");
  Node node = stats.item(0);
  if (node != null)
  node = node.getFirstChild();
  if (node != null)
  status = node.getNodeValue();
  Document targetDoc = builder.newDocument();
  Element targetRoot = (Element) targetDoc.createElement("ns0:MT_Output");
  Element stat = (Element) targetDoc.createElement("status");
   DOMSource domSource = new DOMSource(targetDoc);
           StreamResult result = new StreamResult(out);
           TransformerFactory tf = TransformerFactory.newInstance();
           Transformer transformer = tf.newTransformer();
           transformer.transform(domSource, result);
  } catch (Exception e) {
  } // end of execute

Test Result:


To report this post you need to login first.


You must be Logged on to comment or reply to a post.

      1. Amol Bharti

        Hi Indrajit, Can I do rest lookup inside UDF similar to soap lookup? For some reason the lookup in Java mapping is not working for me.


  1. Muniyappan Marasamy

    is it possible to read the header information in the rest lookup response?

    i need to get the “etag” value while performing rest lookup.

    This etag  value is not coming the body. it is coming under response header.

      1. Muni M

        Hi Manoj,

        I was not able to read the header paraters in the rest look up.

        So I created two interfaces, one is for lookup and another one is for main interface, instead of handling in one interface.

        i called first interface(proxy to rest sync) and read the header details in response mapping using dynamic configuration and send it to ECC.

        After lookup service is successful, main interface will be triggered with first interface header values.

        I went with this approach as in house consultant who is going to support is not good at java coding.

        another approach will be calling rest service from java code without using any adapter. this you can put it in udf, java map or adapter module.







        1. Manoj K

          My approach was to have lookup to get the X-csrf-token and use it in subsequent calls. but unfortunately, the session used in lookup and the subsequent calls are different hence that token becomes invalid.

  2. Martin Gutierrez

    Hi Former Member, they have a more complete scenario ?, I am trying to replicate with a restlookup but I can not get a correct result, my doubt is in the mapping of a synchronous scenario, thanks.


  3. Former Member


    My lookup code is not triggering the REST communication channel at all . Any clues please !

    I have used an UDF to do the REST look up and also configured REST Receiver channel with a dummy ICO.


Leave a Reply