Life time of the java MAP

I want a map / list in my java application that should remain in memory until the lifetime of the application. Suppose if the application's life time is1 year then the specified MAP should also remain in memory for 1 year. I am using JDK1.3.
In jdk1.4 sun micro systems has added the facility of Prefrences there we can set our application or system prefrences But I want to implement it in JDK1.3
Please Help me how i can implement this idea. I will be very thankful to you

Hello abdulqadeerbasit,
you could use a singleton pattern :
public class Storage {
     static java.util.Map map;
     static {     //this block will be executed once after classloading of Storage
          initStorage();
     private void initStorage() {
          map = new java.util.HashMap();
          // fill map
          map.put("key", "value");
     public java.util.Map getStorage() {
          return map;
If you call getStorage() the class loader loads it and therefore initializes your map. This map will be in memory till your application stops. You should avoid concurrent modifications (use synchronize).

Similar Messages

  • Default account assignment values during the life time of the session

    Hi Experts,
    In SRM7.0 default account assignment values in 'Change Personal Default Settings' has to be retained in the life time of the user login.
    Eg. A user enters into SRM7.0 web screen(NWBC) and will go to 'Change Personal Default Settings' and enters the values and saves the values and he will do other activities like creating SC and other things, when user logoff from the web screen (NWBC), the values should wipe off and when he logs in again, there shouldnt be any values in account assignment in 'Change Personal Default Settings'.
    Thanks
    SR

    Sam,
    our client's requirement is, those values has to be cleared when user logsoff from NWBC portal, when again he logsin, values should be blank and user can enter the values according to his/her  requirement.
    we tried to capture the action under 'Logoff' button, but, as this button is written in HTML/Java Script, we couldnt able to capture in SRM and I am not Java known person.
    thanks
    SR

  • Get the target system time in the message mapping

    Hi there,
    I need to use the system time of target R/3 system in the message mapping. Any ideas how can I handle this?
    Thanks,
    Igor.

    Thanks for your quick replies.
    XI and R/3 system is in the same timezone but this is not relevant. I know it might sound strange but there is a reason I need to use time in the message mapping which is 2 minutes later than in the target system:
    e.g. target system time: 16:58:32 I need to use 16:56:32 value  in the mapping.
    I found RFC MSS_GET_SY_DATE_TIME which can proide me with the value, just wondering if there is no other way how to do that other than RFC lookup ...
    Thanks,
    Igor

  • Need current data and time stamp in Java mapping

    Hi All,
      I am doing the scenario as file to mail. so here i am using java mappings for sending the file in mail attachment.
      I have done my java mappings and its executed successfully. File is going successfully to third party.
      Business wants date and timestamp in subject line.
    Currently i am using mail subject line as EDI File. 
    But business needs the date and time in the subject line after EDI File as EDI File <yyyymmddhhmm>.
    So my requirement here is adding the date and timestamp.
    Can any one suggest how can write java code to acheive.
    Thanks
    Bhaskar
    Thanks,
    Bhaskar

    Hi Bhaskar,
    >   Business wants date and timestamp in subject line.
    1. Add the import statments at beginning
    import java.util.Date;
    import java.text.SimpleDateFormat;
    2. Add these statments to get timestamp and Concatenate the subject line with string currentdate.
    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmm");
    String currentdate = sdf.format(new Date());
    subjectline = subjectline.concat(currentdate);
    Regards,
    Sunil Chandra

  • Java mapping - for reading the binary file contents and changing filename

    Hi,
    I have already gone through the various bolgs and threads and have not been able to find a solution to my problem.
    One blog did give some idea but did not help- "JAAPPING", an alternate way of reading a CSV file
    I am not very good in java but have been trying some out recently to fulfill the interface requirements.
    I would really appreciate if you could help am I am giving below the detailed scenario below.
    Part 1- working fine - The incoming file looks like:
    :20:STMEMU096868DUBE
    :25:001180256210
    :28C:00371/00001
    :60F:C090617AED742136,92
    :61:0906300630CD34,27FINTCREDIT INTEREST
    26MAY2009 TO 25JUN2009
    :62F:C090630AED742171,19
    :64:C090630AED742171,19
    The file name as received is:TCDE.BLQSAM.SAEA2682.C0084025.A9G24T58.20090724195908
    This file without any conversion is placed on XI server dircetory folder.
    Part 2 - need to develop
    The file should now be renamed according to the incoming value in 2nd line - specifically the 12 digit value 001180256210 and placed on the R/3 dircetory folder.
    The new file name in the above example should be:
    AC_NO_001180256210_datetime
    The module for the above was created and the last time I checked it was working.
    However, when I wanted to do final testing in Dev and move the changes further, the module has seemed to have stopped working so I need an alternate solution fast.
    I was thinking of doing the Java mapping as I will be more in control as to what is going on thereby reducing the dependency.
    There is no need to create any target xml structure as the file as it is needs to be placed in the target folder with a new name.
    I can get the file name in UDF which I have already created but i am not usre if it working.
    Can you please help?
    Any help will be greatly appreciated.
    Regards,
    Archana
    +44-7867636863

    Hi Stephen
    The xml must be getting added in the below part of the code. It is coming from arg[0]
    You can put a check and get it removed.
    while ((len = arg0.read(buffer)) != -1) {
      arg1.write(buffer, 0, len);
    Regards
    Osman

  • How can i cancle the life time on ipsec

    hi
    when i do show crypto session detail command i get this following massage:
    Interface: FastEthernet0/1
    Session status: UP-ACTIVE
    Peer: 172.30.102.101/500 fvrf: (none) ivrf: (none)
    Phase1_id: 172.30.102.101
    Desc: (none)
    IKE SA: local 172.30.102.102/500 remote 172.30.102.101/500 Active
    Capabilities:D connid:84 lifetime:23:55:29
    IPSEC FLOW: permit ip 172.30.102.100/255.255.255.252 172.30.102.100/255.255.25
    5.252
    Active SAs: 2, origin: crypto map
    Inbound: #pkts dec'ed 16 drop 0 life (KB/Sec) 4477653/3329
    Outbound: #pkts enc'ed 16 drop 4 life (KB/Sec) 4477653/3329
    That mean i have a lifetime with as appear in the example : 23:55:29, and after that time the the ipsec is getting down.
    how can i disable this life time,that the ipsec(crypto)work allways.
    thanks.

    Menash
    The lifetime of the Security Association is part of the design of IPSec and you can not disable it. The purpose of the lifetime is to periodically force the peers to negotiate new keys. If the peers kept the same key always it would make it easier to crack the encryption but forcing periodic negotiation of new keys helps provide protection for the traffic. You can configure a longer lifetime if you wish, but you can not disable the lifetime.
    HTH
    Rick

  • Linkage error occured when loading the class:Java Mapping

    I AM GETTING THE ABOVE ERROR IN SUB WHEN TESTING THE MAPPING .
    Source:
    <MTO_FTP_MAT_DETAILS>
    <MATDETAILS>
    <MAKTX>
    <MATNR>
    <WERKS>
    <LABST>
    <MEINS>
    <PERCNT>
    TARGET
    MTI_FTP_MAT_DETAILS
    <MATDETAILS>
    <MAKTX>
    <MATNR>
    <WERKS>
    <LABST>
    <MEINS>
    <PERCNT>
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.util.Map;
    import javax.xml.parsers.SAXParser;
    import javax.xml.parsers.SAXParserFactory;
    import org.xml.sax.Attributes;
    import org.xml.sax.SAXException;
    import org.xml.sax.helpers.DefaultHandler;
    import com.sap.aii.mapping.api.StreamTransformation;
    class Echo {
         public static OutputStream out;
    public class myEcho extends DefaultHandler implements StreamTransformation {
         private Map map;
         public void setParameter(Map param) {
              map = param;
         public void execute(InputStream in, OutputStream out) {
              DefaultHandler handler = this;
              SAXParserFactory factory = SAXParserFactory.newInstance();
              try {
                   SAXParser saxParser = factory.newSAXParser();
                   Echo.out = out;
                   saxParser.parse(in, handler);
              } catch (Throwable t) {
                   t.printStackTrace();
         public void startDocument() throws SAXException {
              try {
                   Echo.out.write("<?xml version='1.0' encoding='UTF-8'?>".getBytes());
              } catch (IOException e) {
                   e.notify();
         public void endDocument() throws SAXException {
              try {
                   Echo.out.flush();
              } catch (IOException e) {
                   throw new SAXException("I/O error", e);
         public void startElement(String namespaceURI, String sName, // simple name
         String qName, // qualified name
         Attributes attrs) throws SAXException {
              String eName = sName; // element name
              if ("".equals(eName))
                   eName = qName; // not namespace-aware
              if ("ns0:MTO_SAP_MAT_DETAILS".equals(qName)) {
                   try {
                        Echo.out.write(("<MTI_FTP_MAT_DETAILS>").getBytes());
                   } catch (Exception e) {
                        e.printStackTrace();
              } else {
                   try {
                        Echo.out.write(("<" + qName + ">").getBytes());
                   } catch (Exception e) {
                        e.printStackTrace();
         public void endElement(String namespaceURI, String sName, // simple name
         String qName // qualified name
         ) throws SAXException {
              String eName = sName; // element name
              if ("".equals(eName))
                   eName = qName; // not namespace-aware
              if ("ns0:MTO_SAP_MAT_DETAILS".equals(qName)) {
                   try {
                        Echo.out.write(("</MTI_FTP_MAT_DETAILS>").getBytes());
                   } catch (Exception e) {
                        e.printStackTrace();
              } else {
                   try {
                        Echo.out.write(("</" + qName + ">").getBytes());
                   } catch (Exception e) {
                        e.printStackTrace();
         public void characters(char buf[], int offset, int len)
              throws SAXException {
              String s = new String(buf, offset, len);
              try {
                   Echo.out.write(s.getBytes());
              } catch (Exception e) {
                   e.printStackTrace();

    Hi,
    When you make the jar to import to XI you must verify the two classes are generated at the same time. Later you can verify in Inteface Mapping that you are using the myEcho class to do the java mapping.
    Plesae verify the java version are the same in you own machine and the xi machine.
    Regards.

  • How can I get the output of graphical mapping as an input to java mapping?

    Hi Experts,
    I am using graphical mapping in my scenario to get an xml at the end, now after this i want to use java mapping and then do encryption on this input. I am using both the mappings in the same interface
    Here the thing is, the input to the java mapping should be the output of the first graphical mapping.
    How can I link the java mapping and graphical mapping so that Ill get the output of the graphical mapping as the input to the java mapping?
    Some pointers to similar kind of implementations is highly appreciated.
    Thanks in advance,
    Thomas
    Edited by: Thomas Varghese on Jan 22, 2009 11:35 AM

    hi,
    the input to the jave mapping will be exaclty the same as if you don't have
    any mapping before that
    the only different is that the input will be XML of the output of the message mapping
    have a look at my blog to see how to combine two mappings:
    /people/michal.krawczyk2/blog/2005/11/01/xi-xml-node-into-a-string-with-graphical-mapping
    that's all
    Regards,
    Michal Krawczyk

  • Creating the container Object In Java Mapping

    Hi,
    i I have a scenarion where i have to set some parameter in the COntainer from the Java Mapping.
    How can i get a reference to the current Container object from my Java Mapping . While using user defined function this object is already avaliable as a parameter and we do not have to create it .But in java mapping how do i get the current container object.
    regards
    Nilesh Taunk.

    Nilesh,
    sorry.. I think this is actually possible.
    In the setParameter()
    public static AbstractTrace trace;
    public void setParameter(Map param) {
              map = param;
              trace =
                   (AbstractTrace) param.get(
                        StreamTransformationConstants.MAPPING_TRACE);
    Likewise, in this method setParameter, you can get and set Container objects.
    I have shown how to use the TRACE .
    Sorry for the confusion
    Regards,
    Bhavesh

  • Is the JTS Transaction Manager Java Mapping of Corba OTS using JSE Impl?

    Hi All,
    I was reading the Java Transaction Service Specification .95 Draft, and I am curious if the Java Mapping of Corba OTS 1.1 Interfaces Implementation is generally referring to the Java Standard Edition implementation of these classes, specifically the IDL code that is converted into Java classes in the tools.jar. I attempted to manually compile the IDL code in the OMG Transaction Service Specification 1.4 using idlj in JDK 1.6 and ran into one compilation issue after another, until I realized The CosTransactions Module, and other required Corba IDL interface are already converted into Java classes in the tools.jar of the JDK. My assumption was I should map directly to the classes in the JDK if I create a Java Transaction Manager for the Java Transaction Service Specification?
    Any help you can provide on this subject will be appreciated.
    Thanks,
    Aaron
    Edited by: 888810 on Sep 30, 2011 1:29 PM
    Edited by: 888810 on Sep 30, 2011 1:30 PM

    Hi All,
    I was reading the Java Transaction Service Specification .95 Draft, and I am curious if the Java Mapping of Corba OTS 1.1 Interfaces Implementation is generally referring to the Java Standard Edition implementation of these classes, specifically the IDL code that is converted into Java classes in the tools.jar. I attempted to manually compile the IDL code in the OMG Transaction Service Specification 1.4 using idlj in JDK 1.6 and ran into one compilation issue after another, until I realized The CosTransactions Module, and other required Corba IDL interface are already converted into Java classes in the tools.jar of the JDK. My assumption was I should map directly to the classes in the JDK if I create a Java Transaction Manager for the Java Transaction Service Specification?
    Any help you can provide on this subject will be appreciated.
    Thanks,
    Aaron
    Edited by: 888810 on Sep 30, 2011 1:29 PM
    Edited by: 888810 on Sep 30, 2011 1:30 PM

  • Functions used in Java mapping

    hi
    If anybody has worked on Java mapping, Can anybody tell me the common functions that are used in Java mapping along with some examples
    Also how java mapping is more useful as compared to XSLT and ABAP mapping, when to use java mapping and some demo example on java mapping if available
    Thanks & regards,
    Loveena.

    Hi Loveena
    refer these Blogs for Step-via step for java mapping
    /people/alessandro.guarneri/blog/2007/03/25/xi-java-mapping-helper-dom
    http://help.sap.com/saphelp_nw04/helpdata/en/e2/e13fcd80fe47768df001a558ed10b6/frameset.htm
    <b>Java Mapping (Part I)</b>
    /people/prasad.ulagappan2/blog/2005/06/29/java-mapping-part-i
    /people/prasad.ulagappan2/blog/2005/06/29/java-mapping-part-i
    /people/prasad.ulagappan2/blog/2005/06/29/java-mapping-part-ii
    /people/prasad.ulagappan2/blog/2005/06/29/java-mapping-part-iii
    https://www.sdn.sap.com/irj/sdn/wiki?path=/display/xi/javaMappingusingDOMParser&
    /people/alessandro.guarneri/blog/2007/03/25/xi-java-mapping-helper-dom
    https://www.sdn.sap.com/irj/sdn/wiki?path=/display/snippets/binary%2bconversion%2bin%2bxi%2b-%2bjava%2bmapping
    JAVA Mapping :If you have complex mapping in your scenarios and also some times if you have more than 100 field to map then better to choose the JAVA MApping
    Java Mapping uses 2 types of parsers. DOM and SAX. DOM is easier to use with lots of classes to help you create nodes and elements, but, DOM is very processor intensive.
    SAX parser is something that parses your XML one after the other, and so is not processor intensive. But, it is not exactly easy to develop either.
    DOM and SAX are APIs
    In NWDS we have to develop the mapping and create jar and archieve and import it under Iported archieved in IR. this can be used in Interface mapping.
    See the below links so that you can have screen shots,...
    Java Mapping
    /people/prasad.ulagappan2/blog/2005/06/29/java-mapping-part-i
    /people/prasad.ulagappan2/blog/2005/06/29/java-mapping-part-ii
    /people/prasad.ulagappan2/blog/2005/06/29/java-mapping-part-iii
    Re: java ,abap and XSLT mapping
    Re: java ,abap and XSLT mapping
    Re: When to Use XSLT,Java or Graphical Mapping
    mapping
    Testing and Debugging Java Mapping -/people/stefan.grube/blog/2006/10/23/testing-and-debugging-java-mapping-in-developer-studio
    Thanks !!
    Regards
    Abhishek Agrahari

  • XML not well formed - Java Mapping, Webservice to RFC Scenario

    Hello All Experts,
    I have facing a strange type of error. I have written a Java Mapping which implements a DOM parser to take a request from a Webservice and validate it on the basis of some prerequisites. i.e. If data in the incoming request is valid, it creates a message of the same structure type as the input. If the incoming data is incorrect or incomplete; It generates an Error response structure.
    When I run and test the same mapping program using Editplus Java editor for the error scenario; it executes perfectly and creates the correct error XML structure. (I checked it by importing the structure in the XI Message mapping test tab). But when I create jar of my java mapping program and test it in my interface mapping, it gives me "XML not well formed error" (Problem while building the tree).
    Any idea as to why is it behaving in such a way? There are 2 reasons which come to my mind as of now:
    1. The initilization of my input and output streams in the public static void main:
                InputStream in = new FileInputStream(new File("Input.xml"));
               OutputStream out = new FileOutputStream(new File("Output.xml"));
               validateXML myMapping = new ValidateXML();
                myMapping.execute(in, out);
    The Output.xml has the xml structure for the correct case, do I have to initialize my outputstream for the error file? say error.xml
    2. My Webservice interface is a sychronous interface (Request / Response) and output of the Java mapping program are two asynchronous interface. (I'll use a synch-asynch bridge when this works) - Is that causing a problem?
    Please help.
    Best regards,
    Varun

    Hello Varun,
    it gives me "XML not well formed error" (Problem while building the tree).
    I have come across the same error message while testing in interface mapping. My problem was when an exception occured in java mapping, the execution terminates with the messages XML not well formed error". In order to solve this issue what i did was catch the exception type TransformerException and in that catch block throw StreamTransformationException exception in main methos of mapping program i.e execute().
    eg:-                                                                               
    catch (TransformerException e) {
                   throw new StreamTransformationException("Can not write XML.", e);
    By doing this you will see the exception raised , because some times when you execute your mapping with mail() method, though it create the file, when you try to open it will give error if any exceptions occured in mapping. By using the above notation you can handle those in java mapping.
    Hope you have gone through this blog.
    [Handling and Tracing Exceptions in java mapping|http://www.sdn.sap.com/irj/scn/weblogs;jsessionid=(J2EE3417700)ID1055371050DB01666765031379427182End?blog=/pub/wlg/15061]
    Regards,
    Prasanna

  • Java mapping runtime issue

    Hi,
    I have currently created a java mapping which unzips files and transforms plain text/falt files to xml according to a specific structure... So far so good. This stuff works perfectly when testing interface mapping in the repository. However at runtime it does not work, and this is where you clever guys come into the picture:-)
    It should be mentioned that the zip-file is dropped on a MQ-queue and picked up in XI and passed on to a BPM - the only thing the BPM does is to perform the java mapping and afterwards send one of the messages to R/3 and the other to CRM.
    The concrete error given at runtime in the PE is:
    Error handling for work item 000000718016
    Work item 000000718016: Object CL_SWF_XI_MSG_BROKER method CALL_TRANSFORMATION cannot be executed
    Parsing error before mapping: unexpected end-of-file (line 1, column 1)
    Hope somone can help me on this matter,
    Best regards,
    Daniel
    PS: In case it is of interest/use the java code used is this:
    package dk.post.xi.unzipAndConvert;
    import java.io.*;
    import java.util.Map;
    import java.util.HashMap;
    import java.util.zip.ZipEntry;
    import java.util.zip.ZipInputStream;
    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 UnzipMain implements StreamTransformation {
         private MappingTrace mappingTrace = null;
         private Map param = null;
         private StringBuffer currentXmlRecord = new StringBuffer();
        private StringBuffer currentPlainRecord = new StringBuffer();
        private int[][] dataRanges = null;
        private char[] charsInCurrentRange = new char[650];
         private String[] xmlTagNames = null;
         /* (non-Javadoc)
    @see com.sap.aii.mapping.api.StreamTransformation#setParameter(java.util.Map)
    Method must be implemented when class is implementing streamTransformation
           public void setParameter(Map param) {
            this.param = param;
            if (param == null) {
               this.param = new HashMap();
    (non-Javadoc)
    @see com.sap.aii.mapping.api.StreamTransformation#execute(java.io.InputStream, java.io.OutputStream)
    Main function -- called by XI to start execution of java mapping
           public final void execute(InputStream in, OutputStream out)
                throws StreamTransformationException
                //if no input, then cancel program execution
                if (in == null) {
                     throw new RuntimeException("Something wrong with input zip file - is null");
                //input <> null. Begin upzip operation
                try {
                     //test is only relevant outside of XI
                     if (param != null) {
                          mappingTrace = (MappingTrace) param.get(StreamTransformationConstants.MAPPING_TRACE );
                  ZipInputStream zip = null;
                     try {
                          zip = new ZipInputStream(in);
                          ZipEntry ze = null;
                          out.write("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?><ns0:Messages xmlns:ns0=\"http://sap.com/xi/XI/SplitAndMerge\">".getBytes());
                          while ((ze = zip.getNextEntry()) != null) {
                               writeDebugInfo("File: " + ze.getName() + " with compressed size: " + ze.getCompressedSize());
                               scrutinize(zip,(ZipEntry) ze, out);
                          out.write("</ns0:Messages>".getBytes());
                     finally {
                          if (zip != null)
                               zip.close();
                          out.flush();
                          out.close();
                } catch (Exception e) {
                     throw new RuntimeException(e + "\nSomething went wrong...");
           //Unzip flat files and convert to xml
           private void scrutinize(ZipInputStream inStream,ZipEntry zipEntry, OutputStream outstream) throws Exception {
                long start = System.currentTimeMillis();
              InputStreamReader inStreamReader = null;
              BufferedReader buffReader = null;
              byte[] xmlBytes = null;
              try {
                   inStreamReader = new InputStreamReader(inStream);
                   buffReader = new BufferedReader(inStreamReader);
                 boolean masterData = zipEntry.getName().equals("PD-01-STAMDATA.DAT");
                 boolean creditData = zipEntry.getName().equals("PD-02-KREDITVURDERING.DAT");
                 String currentLine = null;
                 if (masterData) {
                      writeDebugInfo("- Begin reading and converting every line of MasterData...");     //out-comment this outside of XI, or compilation will fail (functionality is only available in XI)
                      outstream.write("<ns0:Message1><ns1:masterData_MT xmlns:ns1=\"http://pdk/xi/kob/importDataToSap\">".getBytes());
                        while ((currentLine = buffReader.readLine()) != null) {
                           //convert one line of credit data plain into an xml record structure
                           makeXmlRecord(currentLine,true);
                           //Write record XML to XI's outputstream (appends)
                           xmlBytes = currentXmlRecord.toString().getBytes();
                           outstream.write(xmlBytes);
                      outstream.write("</ns1:masterData_MT></ns0:Message1>".getBytes());
                      writeDebugInfo("- Finished reading and converting every line of MasterData...");     //out-comment this outside of XI, or compilation will fail (functionality is only available in XI)
                 if (creditData) {
                      writeDebugInfo("- Begin reading and converting every line of CreditData...");
                      outstream.write("<ns0:Message2><ns1:creditData_MT xmlns:ns1=\"http://pdk/xi/kob/importDataToSap\">".getBytes());
                      while ((currentLine = buffReader.readLine()) != null) {
                           //convert one line of credit data plain into an xml record structure
                           makeXmlRecord(currentLine,false);
                           //Write record XML to XI's outputstream (appends)
                           xmlBytes = currentXmlRecord.toString().getBytes();
                           outstream.write(xmlBytes);
                      outstream.write("</ns1:creditData_MT></ns0:Message2>".getBytes());
                      writeDebugInfo("- Finished reading and converting every line of CreditData...");
              } finally {
                   long timeUsed = System.currentTimeMillis() - start;
                   writeDebugInfo(zipEntry.getName() + "  - Write took: " + timeUsed + " ms");
                   writeDebugInfo("Final statement entered...\n");
           //check for invalid xml chars (plus a few other strange chars) in a plain text record and if any are found update the ranges of so they correspond to the new length of a record
           private int[][] checkRange(String currentPlainLine, boolean isMasterData) {
                int counter = 0;
                int beginRange = 0;
                int endRange = 0;
                //populate array with proper data ranges/intervals according to how data is to be split
                dataRanges = isMasterData ? new int[][] {{0,2},{2,12},{12,44},{44,47},{47,50},{50,295},{295,298},{298,356},{356,426},{426,496},{496,499},{499,506},{506,510},{510,518},{518,540},{540,546},{546,552},{552,558},{558,564},{564,570},{570,576},{576,582},{582,588},{588,594},{594,604}} : new int[][] {{0,2},{2,12},{12,20},{20,23},{23,26},{26,29},{29,44}};
                //ensure stringbuffer is empty
                currentPlainRecord.delete(0,currentPlainRecord.length());
                //insert the current plain text line into stringbuffer
                currentPlainRecord.append(currentPlainLine);
              //loop through outer array (array of ranges)
              for (int i = 0; i <= (dataRanges.length-1); i++) {
                   beginRange = dataRanges<i>[0];
                   counter = beginRange;
                   endRange = dataRanges<i>[1];
                   //loop through stringbuffer, based on the value-pairs of ranges/intervals in array of arrays
                   while (counter < endRange) {
                        switch (currentPlainRecord.charAt(counter)) {
                             case '&':
                                  currentPlainRecord.insert(counter+1,"amp;");          //insert 'amp;' after '&', so that syntax conforms to xml syntax requirements (&amp;)
                                  counter += 5;                                                   //increment counter so that it continues after insertet characters
                                  updateRange(counter,4);                                        //update the array of ranges so that is corresponds to the new range
                                  break;
                             case '\'':
                                  currentPlainRecord.replace(counter,counter+1,"&");     //replace '\'' with '&'
                                  currentPlainRecord.insert(counter+1,"apos;");          //insert 'apos;' after '\'', so that syntax conforms to xml syntax requirements (&apos;)
                                  counter += 6;                                                   //increment counter so that it continues after insertet characters
                                  updateRange(counter,5);                                        //update the array of ranges so that is corresponds to the new range
                                  break;
                             case '"':
                                  currentPlainRecord.replace(counter,counter+1,"&");     //replace '"' with '&'
                                  currentPlainRecord.insert(counter+1,"quot;");          //insert 'quot;' after '"', so that syntax conforms to xml syntax requirements (&quot;)
                                  counter += 6;                                                   //increment counter so that it continues after insertet characters
                                  updateRange(counter,5);                                        //update the array of ranges so that is corresponds to the new range
                                  break;
                             case '<':
                                  currentPlainRecord.replace(counter,counter+1,"&");     //replace '<' with '&'
                                  currentPlainRecord.insert(counter+1,"lt;");               //insert 'lt;' after '&', so that syntax conforms to xml syntax requirements (&lt;)
                                  counter += 4;                                                   //increment counter so that it continues after insertet characters
                                  updateRange(counter,3);                                        //update the array of ranges so that is corresponds to the new range
                                  break;
                             case '>':
                                  currentPlainRecord.replace(counter,counter+1,"&");     //replace '>' with '&'
                                  currentPlainRecord.insert(counter+1,"gt;");               //insert 'gt;' after '&', so that syntax conforms to xml syntax requirements (&gt;)
                                  counter += 4;                                                   //increment counter so that it continues after insertet characters
                                  updateRange(counter,3);                                        //update the array of ranges so that is corresponds to the new range
                                  break;
                             case 0x7F:
                                  currentPlainRecord.replace(counter,counter+1," ");     //replace 0x7F with ' '
                                  writeDebugInfo("-- Corrected the character 0x7F ('') to ' '");
                                  counter++;
                                  break;
                             case '‘':
                                  currentPlainRecord.replace(counter,counter+1," ");     //replace 0x91 ('‘') with ' '
                                  writeDebugInfo("-- Corrected the character '‘' to ' '");
                                  counter++;
                                  break;
                             case '›':
                                  currentPlainRecord.replace(counter,counter+1," ");     //replace 0x9B ('›') with ' '
                                  writeDebugInfo("-- Corrected the character 0x9B to ' '");                              counter++;
                                  break;
                             case '†':
                                  currentPlainRecord.replace(counter,counter+1," ");     //replace '†' with ' '
                                  writeDebugInfo("-- Corrected the character '†' to ' '");
                                  counter++;
                                  break;
                             default :
                                  counter++;
                                  break;
                return dataRanges;
           //update array of ranges so that is corresponds to the new range
           private void updateRange(int currentRange, int updateRangeBy) {
              for (int k = currentRange; k < dataRanges.length; k++) {
                   if (k != currentRange) {     //never update begin interval for the current range - only for the remaining intervals
                             dataRanges[k][0] += updateRangeBy;
                   dataRanges[k][1] += updateRangeBy;     //always update end intervals
           //convert one flat record line to a xml record structure
         private void makeXmlRecord(String currentPlainLine,boolean isMasterData) {
              dataRanges = checkRange(currentPlainLine,isMasterData);
              //clear StringBuffer
              currentXmlRecord.delete(0,currentXmlRecord.length());
              //get the correct set of xml tags to be used when performing mapping between plain text and xml
              if (isMasterData) {
                   xmlTagNames = new String[] {"dum1","kob_no","dum2","corp_status","legal_form","dum3","pr_protec_code","dum4","uri","email","emp_no_grp_code","exact_no_emp","dum5","founding_date","dum6","main_industry_code","industry_code1","industry_code2","industry_code3","industry_code4","industry_code5","industry_code6","industry_code7","industry_code8","dum7"};
              } else {
                   xmlTagNames = new String[] {"dum1","kob_no","rating_date","rating_value","risc_grp_code","currency","max_credit"};
              //copy all chars in stringBuffer to the specified char[]
              currentPlainRecord.getChars(0,currentPlainRecord.length(),charsInCurrentRange,0);
              //populate XML record structure
              currentXmlRecord.append("<record>");
              for (int i = 0; i < xmlTagNames.length; i++) {
                   currentXmlRecord.append("<" + xmlTagNames<i> + ">");
                   currentXmlRecord.append(charsInCurrentRange,dataRanges<i>[0],(dataRanges<i>[1])-(dataRanges<i>[0]));
                   currentXmlRecord.append("</" + xmlTagNames<i> + ">");
              currentXmlRecord.append("</record>");
         //write debug information to correct "place"
         private void writeDebugInfo(String debugInfo) {
              if (mappingTrace == null) {
                   System.out.println("Debug: " + debugInfo);
              } else {
                   mappingTrace.addInfo("Debug: " + debugInfo);

    Hi Alex,
    Thanks for your reply. First of all I was wondering if I missed something somewhere in my generel understanding of XI and BPM's!? - I kind of sense some irony/sarkasm in beginning of your reply:-) As far as I know BPM should have no trouble receing non-xml (in my case zip-files)!?
    Anyways here goes:
    1. Yes, this is also my impression that is should be possible somehow (we do currently run sp14). However, I havent yet figured out how to do it in this case. When trying to create interface mapping between the three involved software components, I get a 'MESS_MULTI_MAP_IF_WRONG_SWCV' three times. I've searched around without being able to find any information on the error. I does seem, though, like the problem is that all objects aren't in the same software component!! But this approach is of course the prefered one...
    2. Well - you got me there. Kind of expected someone to point that out:-) This is of course something to be looked into also in order to "improve"/"enhance" the program - though it, as already pointed out, works perfectly as is.
    3. This part I have also thought about - though quickly moved away from the idea, but that is only due to lacking insight/knowhow on the subject. Interesting weblog you have written, something so I will investigate further when  time allows for it:-)
    Best regards,
    Daniel

  • Null exception in Java mapping

    Hi Experts,
    I am getting "Exception in thread "main" java.lang.NoClassDefFoundError: com/sap/aii/utilxi/misc/api/BaseRuntimeException
    in line Container container = new Context(new FunctionWrapper(0)); " when trying to execute the java mapping inside my interface mapping.
    I am using the following code iside my java class in NWDS when I get the above error:
    //Get the message Header
              Container container = new Context(new FunctionWrapper(0));
              map = container.getTransformationParameters();
              strMessageID =  (String) map.get("MessageId"); // Get Message GUID
              strMessageID = strMessageID.trim();
              strMessageDate =  (String) map.get("TimeSent");
              strMessageTime = (String) map.get("TimeSent"); // Get Time Sent
    I have also imported aii_mt_rt.jar, aii_map_api.jar, aii_utilxi_misc.jar  into my class.
    Please can you help me solve this problem.
    Thanks and regards,
    Brendon

    I solved the problem by using
    strMessageID = (String)param.get(     
    StreamTransformationConstants.MESSAGE_ID);

  • Multi Mapping in Java Mapping

    Hello Everyone,
    My scenario has a flat file that needs to be grouped and split into multiple xml files
    Since the source is a flat message I have used a java mapping where the splitting happens.
    I've also made sure to add the <mesages> and <messages1> tags for the target message so that my file asapter can split it
    The problem is when i test this interface i get  'Eror while constructing multi-XML Doucment' in my moni
    Anybody had similar problems..??
    Thanks
    Bharath

    Yes,
    I've worked on a few multi mappings before successfully.. so the obvious doubts can be ruled out..
    however this is the first time Im using Java mapping to do this..
    One doubt that however is hovering is "can flat files be used as input ??" or should I use FCC to convert into a simple XML with just one node and parse it to get my payload?

Maybe you are looking for