Additional Blogs by Members
cancel
Showing results for 
Search instead for 
Did you mean: 
iprieto
Contributor

Introduction

This blog explain you how to develop a java mapping class for using it in your Interface Mapping in SAP PI. It's a tutorial for beginers.

Implements a Java class for mapping purpose require the next steps:

  1.- Development Tool like SAP Netweaver Developer Studio, NetBeans, Eclipse ....

  2.- Import aii_map_api.jar library.

  3.- Write the Source code for the mapping program. (We need to know DOM or SAX parsing proccesing)

  4.- Generate .jar file with the compiled class.

  5.- Import Jar File in SAP PI.

  6.- Use the program mapping in Interface Mapping.

1.- Open a Development Tool.

Firstly, we are going to open the SAP Netweaver Developer Studio for create a new project.

2.- Next, we must to import the aii_map_api.jar library. The file aii_map_api.jar is located in j2ee\\cluster\\server0\\apps\\sap.com\\com.sap.xi.services directory.

       

3.-  Write Java Source.

package com.xi.test;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Map;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

import com.sap.aii.mapping.api.AbstractTrace;
import com.sap.aii.mapping.api.MappingTrace;
import com.sap.aii.mapping.api.StreamTransformation;
import com.sap.aii.mapping.api.StreamTransformationConstants;
import com.sap.aii.mapping.api.StreamTransformationException;

public class NameMerge implements StreamTransformation {

    private Map param = null;
    private MappingTrace trace = null;

    public void setParameter(Map param) {
        this.param = param;
        if (param == null) {
            this.param = new HashMap();
        }
    }

    public void execute(InputStream input, OutputStream output)
        throws StreamTransformationException {

        AbstractTrace trace = null;
        String RESULT = new String();

        trace =
            (AbstractTrace) param.get(
                StreamTransformationConstants.MAPPING_TRACE);

        try {
            //Create DOM parser
            DocumentBuilderFactory factory =
                DocumentBuilderFactory.newInstance();
            DocumentBuilder builder = factory.newDocumentBuilder();

            //Parse input to create document tree
            Document doc = builder.parse(input);
            trace.addInfo(doc.toString());

            //Map the elements
            Node root = doc.getFirstChild(); // gets the root element
            NodeList children = root.getChildNodes();
       
            for (int item = 0; item < children.getLength(); item++) {
                if (children.item(item) instanceof Element) {
                    root = (Element) children.item(item);
                    NodeList ch = root.getChildNodes();
                    RESULT = RESULT.concat(ch.item(0).getNodeValue() + " ");
                }

            }

            trace.addInfo(RESULT);

        } catch (Exception e) {
            trace.addDebugMessage(e.getMessage());
        }

        //Return the output document
        String document_exit =
            "<?xml version=\\"1.0\\" encoding=\\"UTF-8\\"?><ns0:Person2 xmlns:ns0=\\"urn:xxxxx.com:test:mapping:lookups\\"><RESULT>"
                + RESULT
                + "</RESULT></ns0:Person2>";

        try {
            output.write(document_exit.getBytes());
        } catch (IOException e1) {
            trace.addDebugMessage(e1.getMessage());
        }

    }

}

4.- Generate JAR file.

   Go to File->Export in SAP Netweaver Developer Studio a choose the project where you have developed the mapping program and you must export it to a file.

5.- Import JAR File.

   Go to Integration Repository, Mapping Object -> Imported Archives. You must to create a new Imported Archives and import the file that you had generated in SAP NDS.

6.- Use the program mapping in Interface Mapping

Finally, you have to use the java class in an Interface Mapping.

The XML used for creating the java test class are:

<?xml version="1.0" encoding="UTF-8"?>

<ns0:Person1 xmlns:ns0="urn:xxxxx.com:test:mapping:lookups">
   <NAME>Ivan</NAME>
   <SURNAME>Prieto</SURNAME>
</ns0:Person1>

<?xml version="1.0" encoding="UTF-8"?>

<ns0:Person2 xmlns:ns0="urn:xxxxxxx:test:mapping:lookups"><RESULT>ivan prieto </RESULT>

</ns0:Person2>

4 Comments