Skip to Content

JDBC to SOAP Mapping Issue

Hi All,

I am working on JDBC to SOAP scenario. I have sender payload and receiver .xsd file

JDBC Sender Payload:

In 2nd field XML_DATA it's complete one xml.

Receiver data type after importing .xsd file in mapping

You can see target payload start with root node MATMAS, and in sender side in 2nd filed under XML_DATA complete one payload is there starting form MATMAS tag. I am just clue less how to map it. Whatever approach i made every time getting mapping error.

Below is error when i run the mapping.

Please suggest with your idea

Appreciate your valuable time.

Regards,

Binod

Add comment
10|10000 characters needed characters exceeded

  • Hi Everyone,

    Thank you so much for all your support.

    XSLT mapping is working fine now for all the records.

    Old XSLT Mapping (it was working fine for only one record)

    <?xml version="1.0" encoding="UTF-8"?>
    <ns0:stylesheet version="1.1" xmlns:ns0="http://www.w3.org/1999/XSL/Transform" xmlns:a="http://www.sdn.com/xslt">
       <ns0:output method="xml" omit-xml-declaration="yes"/>
       <ns0:template match="/">
          <ns0:for-each select="//MATMAS_XML_DATA">
             <ns0:value-of select="." disable-output-escaping="yes"/>
          </ns0:for-each>
       </ns0:template>
    </ns0:stylesheet>
    

    Updated Zew XSLT Mapping (working fine for all 142 records, as much as record)


    <?xml version="1.0" encoding="UTF-8"?>
    <ns0:stylesheet xmlns:ns0="http://www.w3.org/1999/XSL/Transform" version="1.1">
       <ns0:output method="xml" omit-xml-declaration="yes" />
       <ns0:template match="/">
          <Messages>
             <Message1>
                <ns0:for-each select="//MATMAS_XML_DATA">
                   <ns0:value-of select="." disable-output-escaping="yes" />
                </ns0:for-each>
             </Message1>
          </Messages>
       </ns0:template>
    </ns0:stylesheet>
    

    I used two mapping inside one OM

    1st MM, it 1:N (splits all row in one one )

    2nd XSLT_Mapping it extracts only <MATMAS_XML_DATA> and sending it to target

    Regards,

    Binod

    im.png (7.8 kB)
  • Get RSS Feed

16 Answers

  • Feb 01 at 06:24 PM

    The error [xml][XML] is not allowed is because - you have the

    <?xml version="1.0" encoding="UTF-8"?> declaration for every <MATMAS>, which is not acceptable in XML file, and invalid. for this you must ask source system not to include

    <?xml version="1.0" encoding="UTF-8"?> for every MATMAS node. But even though they send it , the java code I have shared now will take care of it as it is dealing the input file as a stream and then deleting them by converting the input payload as String.

    Here is the modified Java code which will handle the XML namespace -

    /*
     * Author: Sugata Bagchi Majumder
     * Complied on: JDK 1.8
     * This Java class will extract the XML nodes from the entire source XML
     * based on the XPath provided. Then adds the IDoc message type nodes at the beginning and end.
     */
    package com.sap.ExtractMatmas;
    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;
    import java.io.ByteArrayInputStream;
    import java.io.BufferedReader;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.Reader;
    import java.io.StringWriter;
    import java.nio.charset.Charset;
    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.transform.OutputKeys;
    import javax.xml.transform.Transformer;
    import javax.xml.transform.TransformerException;
    import javax.xml.transform.TransformerFactory;
    import javax.xml.transform.dom.DOMSource;
    import javax.xml.transform.stream.StreamResult;
    import javax.xml.xpath.XPath;
    import javax.xml.xpath.XPathConstants;
    import javax.xml.xpath.XPathFactory;
    import org.w3c.dom.Document;
    import org.w3c.dom.NodeList;
    
    
    public class ExtractMATMASIDocs extends AbstractTransformation 
     
    {   
        String xUTF = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"; // need to remove this from source
        public void transform(TransformationInput transformationInput, TransformationOutput transformationOutput) throws StreamTransformationException
              {
            getTrace().addInfo("JAVA Mapping Called");
             try
             {
            // converting the source into string to remove all the xml namespace
            String inData = convertStreamToString(transformationInput.getInputPayload().getInputStream());
            inData = inData.replace(xUTF,""); // removing the xml name space
            // converting into stream again as this needs to be parsed using XML parser
            InputStream isData = new ByteArrayInputStream(inData.getBytes(Charset.forName("UTF-8")));
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            Document doc = dbf.newDocumentBuilder().parse(isData);
            XPath xPath = XPathFactory.newInstance().newXPath();
            //  I have used Java Xpath to extract Block of XML, this can be passed as a parameter as well from interface determination
            // Better to parameterize the Xpath, if there is a change in source structure this code will not work.
            //The Xpath expression can be passed as parameter using below code snippet
            /*
             * String xpathV = transformationInput.getInputParameters().getString("XPATH");
             * XPATH value should be maintained in interface determination and must be binded in operation mapping in ESR.
             * Then the below statement can be modified as -
             * NodeList nodels = (NodeList)xPath.evaluate(xpathV, doc, XPathConstants.NODESET);
             */
            NodeList nodels = (NodeList)xPath.evaluate("MT_MATERIAL_MASTER_OUT/row/MATMAS_XML_DATA/MATMAS/IDOC", doc, XPathConstants.NODESET);
            getTrace().addInfo("Number of IDoc Nodes: "+nodels.getLength());
            String IDocNodes = nodeListToString(nodels);
            IDocNodes ="<MATMAS>".concat(IDocNodes).concat("</MATMAS>");
            transformationOutput.getOutputPayload().getOutputStream().write(IDocNodes.getBytes("UTF-8"));        
            
             } // End of try
             
             catch (Exception e)
             {
                 e.toString();
             } // End of catch
            
                } // End of transform
        private static String nodeListToString(NodeList nodels) throws TransformerException 
           {
            DOMSource source = new DOMSource();
            StringWriter writer = new StringWriter();
            StreamResult result = new StreamResult(writer);
            Transformer transformer = TransformerFactory.newInstance().newTransformer();
            transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
            for (int i = 0; i < nodels.getLength(); ++i)
               {
                source.setNode(nodels.item(i));
                transformer.transform(source, result);
               }
            return writer.toString();
        }
        //below method will convert the input payload from Strema to String
        public String convertStreamToString(InputStream in)
          {
            StringBuffer sb = new StringBuffer();
            try
            {
            InputStreamReader isr = new InputStreamReader(in);
            Reader reader =
            new BufferedReader(isr);
            int ch;
            while((ch = in.read()) > -1) {
                sb.append((char)ch);}
                reader.close();
            }
            catch(Exception exception) 
            {
                exception.toString();
            }
            return sb.toString();
            }
    }// End of class
    
    

    Now coming to your 2nd point - sending one IDOc at a time to target, is this is a synch scenario? if not then you can split the inbound multiple IDocs into separate messages for each IDoc using multi mapping . You can use 2 step mappings in your operation mapping, 1st mapping is this java class which will convert the input payload to multiple Idocs in one XML. in the 2nd step mapping you can use a message mapping with multi mapping. This multi mapping will split the input IDocs into several messages for each IDocs.

    in this 2nd step mapping you can use the same structure at source and target, but you need to change the signature tab in the mapping to 0.. unbounded.

    Here is a link for multi mapping -

    https://blogs.sap.com/2006/02/07/multi-mapping-without-bpm-yes-it-s-possible/

    Multi mapping does not support synch scenario.

    I have added the execution result of the java mapping and the sample source and target file I have used-

    Hope this will help.sourcexml.txttargetidocs.txt

    Thanks

    Sugata


    capture.png (144.3 kB)
    sourcexml.txt (4.9 kB)
    targetidocs.txt (4.2 kB)
    Add comment
    10|10000 characters needed characters exceeded

    • Hi Sugata,

      Getting below error, I checked for one row and multiple row as well.

      In ESR above java mapping is executing fine for more than one row as well.

      Thanks,

      Binod


      capture.png (27.1 kB)
  • Jan 18 at 04:09 AM

    Hi Binod,

    Sorry, the screen shot and issue you have given is not clear to me. You may enter dummy data instead of hiding everything. Please clarify your source structure and expected target structure and data. The screen shot is not giving clear idea of the occurrences of the data elements of the target element.

    However, the error suggests that you are not passing any value (or value in correct context) to the mandatory element MATMAS. For time being pass empty constant and see if your mapping error disappears with only one group of data at your source structure. For permanent solution you must map the desired source field in correct context to the target element.

    Thanks& Regards,

    Binod Kumar

    Add comment
    10|10000 characters needed characters exceeded

  • Jan 18 at 04:15 AM

    Hi Binod,

    You have 2 options :

    • Instead of reading all records at once, read one by one record i.e row by modifying your SQL query in the sender channel. Then use XSLT or Java to read only XML_DATA field data and in the later map this to IDOC 1:1.
    • Read all the record at once set multi-mapping again use XSLT or Java to read only "XML_DATA" field data and in the later map this to IDOC 1:1

    Br,

    Manoj

    Add comment
    10|10000 characters needed characters exceeded

    • Hi Manoj,

      Can you please suggest more details in second point ?

      I have attached complete payload in Binod Mondal comment.

      I got all record once, 143 records (done), ->multi-mapping with java (need ur help) ->map IDOC 1:1 (need ur help)

      Thanks for your time,

      Binod

  • Jan 18 at 12:07 PM

    Hi Binod,

    Your input payload <"/.../row/MATMAS_XML_DATA/"> has complete MATMAS idoc xml structure

    and node <"/..../row/..."> is in multiple occurrence nature, each one having its own MATMAS.

    You can write a JavaMap,

    which can extract each MATMAS payload from input(SenderPayload)

    and can convert into below format(RecevierPayload) to process multiple IDocs in one go:

    <?xml version="1.0" encoding="UTF-8"?>
    <MATMAS01>
       <IDOC BEGIN="">
           /** content of first row element, extarct values from  **/  
           /** extarct values from sender payload element </.../row/MATMAS_XML_DATA/../MATMAS/IDOC/..>  **/
       </IDOC>
       <IDOC BEGIN="">
           /** content of 2nd row element, extarct values from  **/  
           /** extarct values from sender payload element </.../row/MATMAS_XML_DATA/../MATMAS/IDOC/..>  **/
       </IDOC>
    </MATMAS01>
    

    Thanks & Regards,

    Dilip

    Add comment
    10|10000 characters needed characters exceeded

    • Hi Binod,

      If your XSLT code working for one row, your can make it work for multiple rows too. If you want help in XSLT, provide complete XML input and your XSLT-Code which I can update.

      And operation map will always be one only and no need to apply two Maps, you can either use XSLT or Java.

      Thanks & Regards,

      Dilip

  • Jan 21 at 10:04 PM

    Hello Binod,
    As Dilip mentioned you can create a Java mapping to resolve this.

    You have to create a Java mapping which will get the input payload as a Inputstream and then you can find the value of the XML_DATA.
    You can create a Stringbulder to append all the values of XML_DATA field, and later remove the repeated tags like - <MATMAS> ,</MATMAS> and <?xml version="1.0" encoding="UTF-8"?>.

    You also need to have the target external definition of IDoc to be 0..Unbounded.

    In your Java map you can loop thru the input XML and find the value of XML_DATA by getElementsByTagName() method.

    Thanks

    Sugata

    Add comment
    10|10000 characters needed characters exceeded

  • Jan 21 at 10:18 PM

    Sorry, forgot to attach the Java code snippet -

    if you have the input xml like below -

    <Root>
    <Row>
    <Doc>123</Doc>
    <Data>qweqweqweqweq</Data>
    </Row>
    <Row>
    <Doc>123</Doc>
    <Data>qweqweqweqweq</Data>
    </Row>
    </Root>

    then executing the java map below will extract the XML_Data

    try
    {
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder builder = factory.newDocumentBuilder();
    Document document = builder.parse(new File("C:/test.xml")); ----> pass it as input stream
    NodeList nList = document.getElementsByTagName("Row"); -----> name of your node under which the element exists
    for (int temp = 0; temp < nList.getLength(); temp++) {

    Node nNode = nList.item(temp);

    System.out.println("\nCurrent Element :" + nNode.getNodeName());

    if (nNode.getNodeType() == Node.ELEMENT_NODE) {

    Element eElement = (Element) nNode;
    System.out.println("Data Value" +temp+"-> "+ eElement.getElementsByTagName("Data").item(0).getTextContent());
    }
    }
    } catch (Exception e) {
    e.printStackTrace();
    }

    Here

    getElementsByTagName("Data") - > Data is the field name from where you want to extract

    This will be the output -

    Current Element :Row
    Data Value0-> qweqweqweqweq

    Current Element :Row
    Data Value1-> qweqweqweqweq

    Add comment
    10|10000 characters needed characters exceeded

    • Hi Sugata,

      Thanks for your response.

      I didn't get this line "Document document = builder.parse(new File("C:/test.xml")); ----> pass it as input stream"

      We're not reading the file locally, we have to read the file by "transformationInput.getInputPayload().getInputStream();"


      Can you please suggest me how to to write it in below method ?

      public void transform(TransformationInput transformationInput,TransformationOutput transformationOutput)throws StreamTransformationException {

      ................

      ................our logic

      we used to read the payload by below line

      InputStream inputstream = transformationInput.getInputPayload().getInputStream();

      OutputStream outputstream = transformationOutput.getOutputPayload().getOutputStream();

      how write based on this line ?
      Please suggest..

      }

      Appreciate your valuable time.

      Binod


  • Jan 22 at 07:25 AM

    Hi Binod!

    First, the source document in the form you've provided is not valid XML document since it shouldn't contain xml declarations inside (unless CDATA element is used, for example).

    Besides above, this document can be easily transformed to IDoc message MATMAS with multiple IDOC segments (for each "row" element) using XSL transformation.

    Regards, Evgeniy.

    Add comment
    10|10000 characters needed characters exceeded

    • Based on your description "I wrote XSLT mapping which is working for single row only, more than one row it fails." my guess would be either a problem with the declaration for message cardinality within the operation mapping or you have not produced the proper XML output to reflect the message split in your mapping transformation.

      Regards,

      Ryan Crosby

  • Jan 30 at 05:05 PM

    Hi Binod,
    For testing purpose I have used file locally, as you can see I requested to change this with inputstream.

    you can do something like this -

    InputStream inputstream = transformationInput.getInputPayload().getInputStream();

    Document document = builder.parse(inputstream);

    Could you please attach you target IDoc XSD? I will write the complete Java class and send it to you.

    If possible, please attach a sample source xml.

    Thanks

    Sugata

    Add comment
    10|10000 characters needed characters exceeded

  • Jan 30 at 06:49 PM
    <?xml version="1.0" encoding="UTF-8"?>
    <ns:MT_MATERIAL_MASTER_OUT xmlns:ns="http://abc.com/xi/">
       <row>
          <DOCUMENT_NUMBER>0000000001</DOCUMENT_NUMBER>
          <MATMAS_XML_DATA>
    	<?xml version="1.0" encoding="UTF-8"?>
             <MATMAS>
                <IDOC BEGIN="1">
                   <EDI_DC40 SEGMENT="1">
                      <DOCNUM>0000000001</DOCNUM>
                      <DOCREL></DOCREL>
                      <DIRECT></DIRECT>
                      <IDOCTYP></IDOCTYP>
                      <CIMTYP></CIMTYP>
                      <MESTYP></MESTYP>
                      <SNDPOR></SNDPOR>
                      <SNDPRT></SNDPRT>
                      <SNDPRN></SNDPRN>
                      <RCVPOR></RCVPOR>
                      <RCVPRT></RCVPRT>
                      <RCVPRN></RCVPRN>
                      <CREDAT></CREDAT>
                      <CRETIM></CRETIM>
                      <SERIAL />
                   </EDI_DC40>
                   <E1MARAM SEGMENT="1">
                      <MATNR></MATNR>
                      <MTART></MTART>
                      <MEINS></MEINS>
                      <EAN11></EAN11>
                      <MHDHB></MHDHB>
                      <IPRKZ />
                      <E1MAKTM SEGMENT="1">
                         <MAKTX></MAKTX>
                      </E1MAKTM>
                      <E1MARCM SEGMENT="1">
                         <WERKS></WERKS>
                         <LVORM />
                         <INSMK />
                         <XCHPF></XCHPF>
                      </E1MARCM>
                      <E1MARMM SEGMENT="1">
                         <MEINH />
                         <UMREZ />
                         <UMREN />
                      </E1MARMM>
                      <ZMES_AUSP_MES SEGMENT="1">
                         <ATNAM></ATNAM>
                         <ATWRT></ATWRT>
                      </ZMES_AUSP_MES>
                   </E1MARAM>
                </IDOC>
             </MATMAS>
          </MATMAS_XML_DATA>
       </row>      
    </ns:MT_MATERIAL_MASTER_OUT>
    

    Thanks once again.

    In 2nd comment Binod Mondal I have mentioned complete source payload structure and target as well.

    Target structure is exactly payload that is coming in MATMAS_XML_DATA.

    I have attached the sender xml structure, you can find target structure from sender payload itself.

    Note: row is getting repeated

    Many many thanks ,

    Binod


    Add comment
    10|10000 characters needed characters exceeded

  • Feb 01 at 02:33 AM

    I have written the code based on the XML you provided , please try this and let me know if this is working - change package and Class name accordingly -

    /*
     * Author: Sugata Bagchi Majumder
     * Complied on: JDK 1.6
     * This Java class will extract the XML nodes from the entire source XML
     * based on the XPath provided. Then adds the IDoc message type nodes at the beginning and end.
     */
    package com.sap.ExtractMatmas;
    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;
    import java.io.StringWriter;
    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.transform.OutputKeys;
    import javax.xml.transform.Transformer;
    import javax.xml.transform.TransformerException;
    import javax.xml.transform.TransformerFactory;
    import javax.xml.transform.dom.DOMSource;
    import javax.xml.transform.stream.StreamResult;
    import javax.xml.xpath.XPath;
    import javax.xml.xpath.XPathConstants;
    import javax.xml.xpath.XPathFactory;
    import org.w3c.dom.Document;
    import org.w3c.dom.NodeList;
    
    
    public class ExtractMATMASIDocs extends AbstractTransformation 
     
    {   
        public void transform(TransformationInput transformationInput, TransformationOutput transformationOutput) throws StreamTransformationException
              {
            getTrace().addInfo("JAVA Mapping Called");
             try
             {
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            Document doc = dbf.newDocumentBuilder().parse(transformationInput.getInputPayload().getInputStream());
            XPath xPath = XPathFactory.newInstance().newXPath();
            //  I have used Java Xpath to extract IDOc segments of XML, this can be passed as a parameter as well from interface determination
            // Better to parameterize the Xpath, if there is a change in source structure this code will not work.
            //The Xpath expression can be passed as parameter using below code snippet
            /*
             * String xpathV = transformationInput.getInputParameters().getString("XPATH");
             * XPATH value should be maintained in interface determination and must be binded in operation mapping in ESR.
             * Then the below statement can be modified as -
             * NodeList nodels = (NodeList)xPath.evaluate(xpathV, doc, XPathConstants.NODESET);
             */
            NodeList nodels = (NodeList)xPath.evaluate("MT_MATERIAL_MASTER_OUT/row/MATMAS_XML_DATA/MATMAS/IDOC", doc, XPathConstants.NODESET);
            getTrace().addInfo("Number of IDoc Nodes: "+nodels.getLength());
            String IDocNodes = nodeListToString(nodels);
            IDocNodes ="<MATMAS>".concat(IDocNodes).concat("</MATMAS>");
            transformationOutput.getOutputPayload().getOutputStream().write(IDocNodes.getBytes("UTF-8"));        
            
             } // End of try
             
             catch (Exception e)
             {
                 getTrace.addInfo(e.toString());
             } // End of catch
            
                } // End of transform
        private static String nodeListToString(NodeList nodels) throws TransformerException 
           {
            DOMSource source = new DOMSource();
            StringWriter writer = new StringWriter();
            StreamResult result = new StreamResult(writer);
            Transformer transformer = TransformerFactory.newInstance().newTransformer();
            transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
            for (int i = 0; i < nodels.getLength(); ++i)
               {
                source.setNode(nodels.item(i));
                transformer.transform(source, result);
               }
            return writer.toString();
        }
        
    }// End of class
    Add comment
    10|10000 characters needed characters exceeded

    • Hi Sugata & All,

      Thank you for all your support

      By XSLT mapping, I am able to extract the payload and it's working fine for one row at a time. target system is successfully accepting it. But when i try to send all rows at once it throws below error.

      Note:-

      1. Target system can accept only one Idoc in one soap call

      2. When i use file adapter in target side then structure was showing something like below. 1st idoc, 2nd idoc, 3rd idoc ... upto 142

      <?xml version="1.0" encoding="UTF-8"?>
      <MATMAS>
         <IDOC BEGIN="1">
            <EDI_DC40 SEGMENT="1">
               <DOCNUM></DOCNUM>
               <DOCREL></DOCREL>
               <DIRECT></DIRECT>
               <IDOCTYP></IDOCTYP>
               <CIMTYP></CIMTYP>
               <MESTYP></MESTYP>
               <SNDPOR></SNDPOR>
               <SNDPRT></SNDPRT>
               <SNDPRN></SNDPRN>
               <RCVPOR></RCVPOR>
               <RCVPRT></RCVPRT>
               <RCVPRN></RCVPRN>
               <CREDAT></CREDAT>
               <CRETIM></CRETIM>
               <SERIAL />
            </EDI_DC40>
            <E1MARAM SEGMENT="1">
               <MATNR></MATNR>
               <MTART></MTART>
               <MEINS></MEINS>
               <EAN11></EAN11>
               <MHDHB></MHDHB>
               <IPRKZ />
               <E1MAKTM SEGMENT="1">
                  <MAKTX></MAKTX>
               </E1MAKTM>
               <E1MARCM SEGMENT="1">
                  <WERKS></WERKS>
                  <LVORM />
                  <INSMK />
                  <XCHPF></XCHPF>
               </E1MARCM>
               <ZMES_AUSP_MES SEGMENT="1">
                  <ATNAM></ATNAM>
                  <ATWRT></ATWRT>
               </ZMES_AUSP_MES>
            </E1MARAM>
         </IDOC>
      </MATMAS>
      <?xml version="1.0" encoding="UTF-8"?>
      <MATMAS>
         <IDOC BEGIN="1">
            <EDI_DC40 SEGMENT="1">
               <DOCNUM></DOCNUM>
               <DOCREL></DOCREL>
               <DIRECT></DIRECT>
               <IDOCTYP></IDOCTYP>
               <CIMTYP></CIMTYP>
               <MESTYP></MESTYP>
               <SNDPOR></SNDPOR>
               <SNDPRT></SNDPRT>
               <SNDPRN></SNDPRN>
               <RCVPOR></RCVPOR>
               <RCVPRT></RCVPRT>
               <RCVPRN></RCVPRN>
               <CREDAT></CREDAT>
               <CRETIM></CRETIM>
               <SERIAL />
            </EDI_DC40>
            <E1MARAM SEGMENT="1">
               <MATNR></MATNR>
               <MTART></MTART>
               <MEINS></MEINS>
               <EAN11></EAN11>
               <MHDHB></MHDHB>
               <IPRKZ />
               <E1MAKTM SEGMENT="1">
                  <MAKTX></MAKTX>
               </E1MAKTM>
               <E1MARCM SEGMENT="1">
                  <WERKS></WERKS>
                  <LVORM />
                  <INSMK />
                  <XCHPF></XCHPF>
               </E1MARCM>
               <ZMES_AUSP_MES SEGMENT="1">
                  <ATNAM></ATNAM>
                  <ATWRT></ATWRT>
               </ZMES_AUSP_MES>
            </E1MARAM>
         </IDOC>
      </MATMAS>
      
      
      

      3. I don't know how to do it, please suggest me on this.

      4. I tried using two mapping in one operational mapping. 1st one XSLT mapping to read only MATMAS XML payload that i have mention above and 2nd to map 1:1, (source & target structure i made similar based on above one xml payload that m getting in output)

      5. When i use XSLT mapping no need of source & target structure, without structure also it's working fine

      6. I want to send all 142 xml idoc at once,
      -> sender side all 142 rows

      -> receiver side only one doc

      7. This is the XSLT that I'm using, it's working fine without any error, one idoc at a time [for multiple idoc, throws error, that i have mentioned in starting of this comment]

      <?xml version="1.0" encoding="UTF-8"?>
      <ns0:stylesheet version="1.1" xmlns:ns0="http://www.w3.org/1999/XSL/Transform" xmlns:a="http://www.sdn.com/xslt">
         <ns0:output method="xml" omit-xml-declaration="yes"/>
         <ns0:template match="/">
            <ns0:for-each select="//MATMAS_XML_DATA">
               <ns0:value-of select="." disable-output-escaping="yes"/>
            </ns0:for-each>
         </ns0:template>
      </ns0:stylesheet>
      

      Lot's of thanks,

      Binod