Read/Parse XML using DOM Parser in Java Mapping
This blog shows the process to parse the XML file in Java Mapping using DOM Parser.
DOM (Document Object Model) Parser
The Document Object Model (DOM) is an official recommendation of the World Wide Web Consortium (W3C). It defines an interface that enables programs to access and update the style, structure, and contents of XML documents. XML parsers that support DOM implement this interface.
More info: https://developer.mozilla.org/en-US/docs/Web/API/DOMParser
Requirement:
1. Parse the incoming XML (input stream) file using java.
2. Generate the output file in XML format which should be processed by the receiver channel.
Solution:
– Use of DOM (Document Object Model) to parse the XML file and generate the output XML.
Note: It doesn\’t require any external libraries.
Input Payload
<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<ns0:Sender_MT xmlns:ns0=\"urn:riotinto.com:unicorn\">
<Emp_Data>
<First_Name>Vinod</First_Name>
<Last_Name>Kumar</Last_Name>
<City>Gurugram</City>
<Country>India</Country>
</Emp_Data>
<Emp_Data>
<First_Name>Vikash</First_Name>
<Last_Name>Prasad</Last_Name>
<City>Bangalore</City>
<Country>India</Country>
</Emp_Data>
</ns0:Sender_MT>
Output Payload
<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<ns0:Receiver_MT xmlns:ns0=\"urn:riotinto.com:unicorn\">
<ns0:Emp_Data>
<Full_Name>Vinod Kumar</Full_Name>
<Location>Gurugram</Location>
</ns0:Emp_Data>
<ns0:Emp_Data>
<Full_Name>Vikash Prasad</Full_Name>
<Location>Bangalore</Location>
</ns0:Emp_Data>
</ns0:Receiver_MT>
Java Mapping
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
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.AbstractTransformation;
import com.sap.aii.mapping.api.StreamTransformationException;
import com.sap.aii.mapping.api.TransformationInput;
import com.sap.aii.mapping.api.TransformationOutput;
public class EmployeeClass extends AbstractTransformation {
public void transform(TransformationInput in, TransformationOutput out) throws StreamTransformationException {
InputStream inputstream = in.getInputPayload().getInputStream();
ArrayList<String> outputdatalist = null;
try {
outputdatalist = parseXML(inputstream);
} catch (Exception e) {
e.printStackTrace();
}
String prefix = \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\r\\n\"
+ \"<ns0:Receiver_MT xmlns:ns0=\\\"urn:riotinto.com:unicorn\\\">\\r\\n\";
String actualData = \"\";
for (int i = 0; i < outputdatalist.size(); i++) {
actualData = actualData + \"<ns0:Emp_Data>\\r\\n\" + outputdatalist.get(i) + \"</ns0:Emp_Data>\\r\\n\";
}
String suffix = \"</ns0:Receiver_MT>\";
String outputpayload = prefix + actualData + suffix;
OutputStream outputstream = out.getOutputPayload().getOutputStream();
try {
outputstream.write(outputpayload.getBytes());
} catch (Exception e) {
e.printStackTrace();
}
}
private static ArrayList<String> parseXML(InputStream inInput) throws IOException {
ArrayList<String> arrayList = new ArrayList<>();
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setIgnoringElementContentWhitespace(true);
factory.setNamespaceAware(true);
try {
DocumentBuilder builderel = factory.newDocumentBuilder();
Document docIn = builderel.parse(inInput);
docIn.getDocumentElement().normalize();
NodeList nodelist = docIn.getElementsByTagName(\"Emp_Data\");
for (int temp = 0; temp < nodelist.getLength(); temp++) {
Node nNode = nodelist.item(temp);
if (nNode.getNodeType() == Node.ELEMENT_NODE) {
Element element = (Element) nNode;
String firstname = element.getElementsByTagName(\"First_Name\").item(0).getTextContent();
String lastname = element.getElementsByTagName(\"Last_Name\").item(0).getTextContent();
String location = element.getElementsByTagName(\"City\").item(0).getTextContent();
arrayList.add(\"<Full_Name>\" + firstname + \" \" + lastname + \"</Full_Name>\\r\\n\" + \"<Location>\"
+ location + \"</Location>\\r\\n\");
}
}
} catch (Exception e) {
e.printStackTrace();
}
return arrayList;
}
}
Also read about
Post Comment