XI 3.0 AF-Modul DynamicConfiguration: dc.nameLength; dc.valueLength

Hi everybody,
according to SAP Note 974481 I wonder what the purpose of the moduleparameters:
dc.nameLength and  dc.valueLength is?
What sense does it make to restrict the length of
dc.nameLength = maximal length of the name    and
dc.valueLength = maximal length of the value?
What is meant by dc.nameLength and  dc.valueLength?
Could you give a sample?
Thanks
regards
Mario

Hi,
Happy you find Koneki different than editors. We have try hard to bring IDE features in Koneki, the counterpart of that are things such as blinking syntax coloration but workaround exists as Simon explain to you.
Workaround are not perfect and in your case the solution should be to have partial AST generation that can work even if the code contains errors. Doing this on a dynamic language is kind of tricky. We haven't find a solution so far but if you have any clue about that, you are welcome.
Marc

Similar Messages

  • FileName in Sender File Adapter Module

    Hi Folks,
    In my sender file adapter have written a module to read the picked file name. The protocol used is NFS.
    Notice that the file name read in the module has the absolute path, including the directory path. E.g The file name xyz has to be picked from source directory
    XIServer\Outbound. In the module when I retrieve the file name, it comes up as
    XIServer\Outbound\xyz. Is this expected behaviour?
    I was expecting just the file name<xyz> to be retrieved.
    Thanks,
    Anand

    HI,
    Create an UDF and write this code.
    DynamicConfiguration conf = (DynamicConfiguration) container.getTransformationParameters().get(StreamTransformationConstants.DYNAMIC_CONFIGURATION);
    DynamicConfigurationKey key =
    DynamicConfigurationKey.create("http://sap.com/xi/XI/System/File","FileName");
    String ourSourceFileName = conf.get(key);
    return  ourSourceFileName;
    in Adapter u will have Adapter specific parameters check the file name check box.
    Using this UDF u will get the file name at target side.
    Regards,
    Phani.

  • Adapter Module Receiver File Adapter

    Hi All,
    I am getting file name in the Mapping in my target structure in a field FILENAME and i want to use this field to create a file at the target with the name as the value in FILENAME.
    I have to develop this by using Adapter Module.
    Note : This can be done by Variable Substitution and Dynamic Configuration UDF.But i want to implement the same by using adapter module.
    Can somebody help me out in getting the FILENAME from mapping inside the module process method of module.
    Thanks,
    Zabi

    Try this..
    private Map param;
    DynamicConfiguration conf = (DynamicConfiguration) param.get(
    StreamTransformationConstants.DYNAMIC_CONFIGURATION);
    DynamicConfigurationKey KEY_FILENAME = DynamicConfigurationKey.create("http://sap.com/xi/XI/System/File","FileName");
    String Filename = conf.get(KEY_FILENAME);[/code]
    Thanks
    Sebin

  • How to set JMS Header Property without using DynamicConfiguration.

    Hi,
    My Scenario is: PDF File -->XI -->JMS
    I need to send the PDF file as it is to JMS receiver, which shouldn't be a problem. The problem is I need to set the same file name in the Receiver JMS header property.
    So to do this I am using DynamicConfiguration in message mapping but when File Adapter picks the PDF file (as it is) I get the run time mapping error which is quite obvious since message mapping expects the data in xml format.
    Do you have any idea if I can avoid the message mapping and set the Dynamic Configuration somewhere else (not sure if java mapping can help here) or if there is some Module available to set file name in JMS header.
    Note: PDF File name is dynamic.
    Thanks!

    I am on XI 3.0. I am not good in java.. can someone give an example?
    Update:-
    I have done some changes to my code and now it is working for me. Since I don't have much knowledge in Java (except writing UDFs )so don't know how good this coding is but defiantly this is my first step to learn Java APIs. Thanks to everyone for their comments & suggestions!!
    If any improvement in below code can be done please let me know.
    package com.sap.xi;
    import com.sap.aii.mapping.api.*;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.util.HashMap;
    import java.util.Map;
    import com.sap.aii.mapping.api.StreamTransformation;
    import com.sap.aii.mapping.api.StreamTransformationException;
    import org.xml.sax.helpers.DefaultHandler;
    public class JMSHeaderMapping extends DefaultHandler implements StreamTransformation{
       private Map param;
        public void setParameter(Map map)//to access message header data during runtime
            param = map;
            if(param == null)
            param = new HashMap();
        public void execute(InputStream in, OutputStream out)  //This method is used to run the mapping
        throws StreamTransformationException
                DynamicConfiguration dynamicconfiguration = (DynamicConfiguration)param.get("DynamicConfiguration");
                DynamicConfigurationKey key = DynamicConfigurationKey.create("http://sap.com/xi/XI/System/File", "FileName");
                String MyFileName = dynamicconfiguration.get(key);
               DynamicConfigurationKey key1 = DynamicConfigurationKey.create("http://sap.com/xi/XI/System/JMS","DCJMSMessageProperty0");
            dynamicconfiguration.put(key1, MyFileName);
            byte[] inbyte = null;
            try {
        // convert InputStream into byte stream
              int bufsize = in.available();
              inbyte = new byte[bufsize];
              in.read(inbyte);
        // convert byte stream into OutputStream         
              out.write(inbyte);
            catch (Throwable t){
             t.printStackTrace();
    Edited by: Sarvesh Singh on May 9, 2011 8:47 PM

  • How to access Adapter Specific Message Attribute in my  own adapter module

    Hi,
    I'm developing a mail adapter customer module. Now I have a requirement about getting the CC information from mail. Even if I
    checked the option of "use mail package" when configing sender Mail Adapter, I still can not get CC information in my module
    because it is not included in mail package.
    I got to know CC information is included in ASMA(Adapter Specific Message Attribute), but how can I access ASMA in my module?
    Till now I know there are two ways to access ASMA
    1. use AF_Modules/DynamicConfigurationBean XI standard module to access ASMA.I did it as below:
    add this module in front of my own module, then set key: write http://sap.com/xi/XI/System/Mail SHeaderCC and value :      
    <b>message.refToMessageId</b>(which message property should be put here?). I'm trying to get it by message.getRefToMessageId() in my
    own module. But what happens is not as I expected, I get null instead of CC information. Which step I did wrong?
    2. use mapping api
       DynamicConfiguration conf = (DynamicConfiguration) <b>container</b>
        .getTransformationParameters()
        .get(StreamTransformationConstants.DYNAMIC_CONFIGURATION);
         DynamicConfigurationKey key = DynamicConfigurationKey.create(
             “http://sap.com/xi/XI/System/Mail”,
             “SHeaderCC”);
    but how can I get <b>container</b> object in my module?
    Is there any other way to access ASMA in customer module?
    Thanks

    hi,
    >>>>but how can I access ASMA in my module?
    have a look at this blog:
    /people/daniel.graversen/blog/2006/10/05/dynamic-configuration-in-adapter-modules
    and try getMessageProperty
    it's also here:
    in Adapter-Specific Message Attributes link
    http://help.sap.com/saphelp_nw04/helpdata/en/17/50d440e14f8431e10000000a1550b0/frameset.htm
    Regards,
    michal
    <a href="/people/michal.krawczyk2/blog/2005/06/28/xipi-faq-frequently-asked-questions"><b>XI / PI FAQ - Frequently Asked Questions</b></a>

  • Reading Dynamic Configuration information in side adapter module.

    Hi All,
    We are writing an adapter module for one of our receiver adapter.
    On the Sender side we have a file adapter whose adapter specific properties are checked. So the message has the file name in the Dynamic configuration.
    Now we need to read this file name from dynamic configuration inside our adapter module for receiver adapter.
    If any one can tell us how to do this we would be really thankful.
    Thanks
    Abinash

    Bhavesh,
    When we use the follwoing code inside mapping
    DynamicConfiguration conf = (DynamicConfiguration) container.getTransformationParameters().get(StreamTransformationConstants.DYNAMIC_CONFIGURATION);
    the conf object gets populated
    but inside our adapter module we ares using
    Map param;
    DynamicConfiguration conf = (DynamicConfiguration) 
                   param.get(StreamTransformationConstants.DYNAMIC_CONFIGURATION);
                   DynamicConfigurationKey key = DynamicConfigurationKey.create
                   ("http://sap.com/xi/XI/System/File","FileName");
                   String ourSourceFileName = conf.get(key);
    Now the question is from where the <b>object of par</b>am will initialize.
    I think we need to get container object from some where, but don't know how to get it as inside mapping the container object is passed as method argument.
    Thanks
    Abinash

  • Problem while  using module DynamicConfigurationBean

    Hi experts
               I am doing a file-to-file bypass (<b>without any mapping involved</b>) scenario.My input file name is <comanycode>.<date>.<timestamp>.dat and I want output filename as <companycode>constant.<date><timestamp>.dat To achive this I used  <b>Dynamic configuration bean module</b> along with variable substitution but its appending the whole file name however i want only the first four letter of the input file namei.e company code.So plz guide me that wheather using this bean extracting some part of  the file name is possible or not?
    Is there is any other way to extract some part of the file name without doing any mapping i.e without the help of payload? Plz guide me as its urgent.
    Regard
    Neha

    Neha,
    DynamicConfiguration Bean will allow you to set the values,but if I understand right you want to perfrom substring operations etc on the data in the file.
    To do this, you would need a write a Custom Module.
    Regards
    Bhavesh

  • Adapter module for file renaming

    Hi all,
    I want to rename a file before writing into target directory. Is it possible to do this using adapter module? Im using File adapter at the sender and receiver.
    I tried renaming the file using DynamicConfiguration method.I want some custom constants to be added to the file name. I want to know if file renaming is possible by writing an Adapter module ..
    Thanks

    Rahul~
    Writing a module would be too much effort deploying and using..Instead u can use a dummy mapping to target and use a piece of Java code for transformation..
    chk my blog will save u effort..XSL may not be required in ur case
    /people/sriram.vasudevan3/blog/2005/11/21/effective-xsl-for-multimapping-getting-source-filenames-in-legacy-legacy-scenarios

  • Debugging JMS adapter with Module Configuration

    Hi.
    I have a problem debugging my JMS adapter with module configuration.
    All I get from the Message Monitor is a status "System Error", and no error category or error message.
    I know there's an error in my Module configuration design, since it works fine without.
    My configuration looks like this:
    PROCESSING SEQUENCE:
    1     localejbs/AF_Modules/MessageTransformBean     Local Enterprise Bean     XML2Plain
    2     localejbs/SAP XI JMS Adapter/ConvertMessageToBinary     Local Enterprise Bean     convert_XI2Bin
    3     localejbs/SAP XI JMS Adapter/SendBinarytoXIJMSService     Local Enterprise Bean     exit
    MODULE CONFIGURATION:
    XML2Plain     Transform.Class     com.sap.aii.messaging.adapter.Conversion
    XML2Plain     Transform.ContentType     text/plain;charset=utf-8
    XML2Plain     xml.conversionType     StructXML2Plain
    XML2Plain     xml.addHeaderLine     0
    XML2Plain     xml.recordsetStructure     STARTRECORD,DATARECORD,SERVICEYDELSERRECORD,SLUTRECORD
    XML2Plain     xml.STARTRECORD.fieldFixedLengths     2,8,6,7,10,7,3,3
    XML2Plain     xml.DATARECORD.fieldFixedLengths     2,8,6,4,35,17,7,7,7,5,5,5,18,18,18,18,18,18,18,18,18,9
    XML2Plain     xml.SERVICEYDELSERRECORD.fieldFixedLengths     2,8,6,4,3,20,18,18,18
    XML2Plain     xml.SLUTRECORD.fieldFixedLengths     2,8,6,7,10,7
    XML2Plain     xml.STARTRECORD.fixedLengthTooShortHandling     Cut
    XML2Plain     xml.DATARECORD.fixedLengthTooShortHandling     Cut
    XML2Plain     xml.SERVICEYDELSERRECORD.fixedLengthTooShortHandling     Cut
    XML2Plain     xml.SLUTRECORD.fixedLengthTooShortHandling     Cut
    The structure of the message looks like this:
    <STARTRECORD> (occurence = 1)
    <DATARECORD> (occurence = 1..unbounded)
    --- <SERVICEYDELSERRECORD> (occurence = 0..unbounded)
    <SLUTRECORD> (occurence = 1)
    I've crosschecked every field, and it length and all looks like it should!
    The worst part is the one not getting the reason why it fails. Any way I can get this information?
    I've tried to look in the Adapter Framework log, but I have no clue where to look for anything usefull.
    Help
    Regards Peter

    Hello,
    Below is the module configuration in my JMS sender channel:
    Check Message          Local Enterprise Bean          key
    ConvertJMSMessageToBinary      Local Enterprise Bean      convert_JMS2Bin
    ConvertBinaryToXMBMessage     Local Enterprise Bean      convert_Bin2XI
    CallSapAdapter                Local Enterprise Bean          call_AF_MS
    CheckMessage is a custom module which does some check on the incoming message.
    Now what I want to know is at which position should I include the DynamicConfiguration Bean? Should it be included at position 1 or at position 2 or someother position?
    ~Thanks.

  • See Burger Error in BICMODULE-module:Adapter call failed. Reason: null

    Hello All,
    Scenario IDOC to File using Seeburger BIC problems in in my receiver adapter when converting from XML to EDI.
    Error is:
    "Message processing failed. Cause: Error in BICMODULE-module:Adapter call failed. Reason: null"
    The Seeburger modules used in my receiver adapter:
    1     localejbs/CallBicXIRaBean     Local Enterprise Bean     BIC_MT
    2     localejbs/CallBicXIRaBean     Local Enterprise Bean     BIC
    3     localejbs/Seeburger/FileStore     Local Enterprise Bean     ARCHIVE_EDI
    4     CallSapAdapter     Local Enterprise Bean     0
    with following module configurations
    BIC     destDelimiter     @http://seeburger.com/xi/bic/destDelimiter
    BIC     destSourceMsg     source
    BIC     destTargetMsg     MainDocument
    BIC     dynamicConfiguration     true
    BIC     newLine     true
    BIC     useAttribIfSet     true
    BIC_MT     PartnerLookup     on
    BIC_MT     destSourceMsg     MainDocument
    BIC_MT     destTargetMsg     MainDocument1
    BIC_MT     mappingName     XML_Generic_ANSI_X12_to_DB_MT_OUT
    BIC_MT     saveSourceMsg     source
    Can some one tell me why there is an Error and what additional module configurations it requires .
    Thank you,

    Hi,
    If possible go to mapping in BIC designer Tool and execute the same by passing your payload there...
    if you encounter any errors then there might be a problem with mapping developed...or can be payload..
    Also check the parameter used for destSourceMsg source ...is that the source message which contains the payload ?
    HTH
    Rajesh

  • Converting Sender File as attachment using PayloadSwapBean module

    Hi Expert,
    I have a scenario where I have to pick up a file from PI & send it to another PI server as an attachement using XI Adapter.
    I went through SDN & found several messages describing configuration for attachement for mail & SOAP adapter.
    I attached PayloadSwapBean in my sender File channel & passed keyname as Conent-Disposition & keyValue as attachment however I dont see file being converted as an attachment in SXMB_MONI. It still shows it as main payload.
    Please help me on how to convert a sender file payload into attachement. I would like to keep attachment name same as file name. Let me know how we can do that. I also noticed that on receiver XI adapter (which I would be using to send data to next PI system), you can't attach modules. Let me know if there is some other standard way of achieving this requirement.
    Thanks
    Regards
    Sushil

    Hi Stefan,
    No, I dont see dynamic configuration values in second PI system. I am able to see them in first system.
    Hi Amol,
    Do you see dynamic configuration in second PI? I am still referring ASMA in second PI system as file parameters? Should it be HTTP header? (How are you referring ASMA in second PI). Below is my code which give me null at run time.
    DynamicConfiguration dCon =(DynamicConfiguration) container.getTransformationParameters().get(StreamTransformationConstants.DYNAMIC_CONFIGURATION);
    DynamicConfigurationKey dKey = DynamicConfigurationKey.create("http:/"+"/sap.com/xi/XI/System/File","Directory");
    String FileDirectory = dCon.get(dKey);
    return FileDirectory;

  • ABAP Table for DynamicConfiguration details of XML message in SXMB_MONI

    Dear All
    I have a requirement where I have to read the value from DCJMSCorreleationID property of message which is recorded in SXMB_MONI based on the SAP PI message ID.
    I have 2 interfaces as below
    Interface one (INT1) : JMS-PI-ECC --->Inbound interface to ECC when message is received on PI it will have DCJMSCorreleationID populated with some ID as shown below
    Go to SXMB_MONI -->Inbound Message ---> SOAP Header --->DynamicConfiguration
    <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
    <SAP:DynamicConfiguration SOAP:mustUnderstand="1" xmlns:SAP="http://sap.com/xi/XI/Message/30" xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/">
    <SAP:Record namespace="http://sap.com/xi/XI/System/JMS" name="DCJMSCorreleationID">
    a26c4276-9d5e-11e3-ba87-000004238292
    </SAP:Record>
    <SAP:Record namespace="http://sap.com/xi/XI/Message/30/general" name="senderAgreementGUID">dd3fb7c6b983314293e14ba59df1ad45</SAP:Record></SAP:DynamicConfiguration>
    Interface Two (INT2):-ECC-PI-JMS----> Outbound from ECC where I am passing a SAP PI Message ID for INT1 in one of the field
    Can I read this DCJMSCorreleationID for INT1 when INT2 is executed and have message ID for INT1 ?
    Where are these SOAP hearder porperties like DCJMSCorreleationID are stored on ABAP table?

    Thanks Jörg for your reply
    I have a back up plan for ZTable approach but the only concern there is RFC calls for read and write
    we have implemented a FM which gives the original payload using a std SAP functional modules FM SXMB_GET_XI_MESSAGE_INT and  ECATT_CONV_XSTRING_TO_STRING
    But I am looking for the SOAP Header information for DCJMSCorreleationID
    So if there is anything which will help to read this DCJMSCorreleationID property easily form existing message SOAP header is really helpful

  • XI AF API call failed. Module exception: Java Mapping

    Hi Experts,
    I have faced a typical error for one of my interface. The Scenario is SOAP to SOAP and we are performing SOAP Lookup  before sending the data to Target web service. We are using one Java Mapping  'FileIns_lookupLoad.java --- com/fi/' and performing the SOAP Lookup from within the code. In the Lookup Communication channel we are using 'Axis' as message protocol and passing couple of values through Module Key parameters. We have same ESR and ID objects in Development, Quality and Production (as per Version ID and History).
    Now the problem is Lookup is failing only in Development but Quality and Production is working fine. I have replaced Quality CC URL with the development WSDL URL, but that worked fine. That means Development Web Service is good. We are getting the below error in Dev:
    <SAP:Stack>StreamTransformationException triggered by application mapping program com/fi/FileIns_lookupLoad; Look Up Failed</SAP:Stack>
    Trace : *
    <Trace level="1"
    type="T"> Some Thing Wrong in LookUpError when calling an adapter by using the communication channel CC_IN_SOAP_GEInsuranceLoadLookup1 (Party: , Service: BusService_GE, Object ID: 4214805c52893ef9b0b3f0ef0902fe9e) XI AF API call failed. Module exception: 'while trying to invoke the method org.apache.axis.types.URI.toString() of an object returned from com.sap.xi.XI.Message._30.QualifiedName.getNamespace()'. Cause Exception: 'while trying to invoke the method org.apache.axis.types.URI.toString() of an object returned from com.sap.xi.XI.Message._30.QualifiedName.getNamespace()'. </Trace>
      <Trace level="1" type="T">*** END APPLICATION TRACE ***</Trace>
      <Trace level="1" type="T">Java mapping com/fi/FileIns_lookupLoad has thrown a StreamTransformationException. Thrown: com.sap.aii.mapping.api.StreamTransformationException: Look Up Failed at com.fi.FileIns_lookupLoad.execute(FileIns_lookupLoad.java:282) at com.fi.FileIns_lookupLoad.transform(FileIns_lookupLoad.java:74) at com.sap.aii.ib.server.mapping.execution.JavaMapping.executeStep(JavaMapping.java:92) at com.sap.aii.ib.server.mapping.execution.Mapping.execute(Mapping.java:60) at com.sap.aii.ib.server.mapping.execution.SequenceMapping.executeStep.................................................
    ................................................................................<Trace level="1" type="T">Application mapping program com/fi/FileIns_lookupLoad throws a stream transformation exception: Look Up Failed Thrown: com.sap.aii.ib.core.mapping.execution.ApplicationException: Application mapping program com/fi/FileIns_lookupLoad throws a stream transformation exception: Look Up Failed at com.sap.aii.ib.server.mapping.execution.JavaMapping.executeStep(JavaMapping.java:95) at com.sap.aii.ib.server.mapping.execution.Mapping.execute(Mapping.java:60) at com.sap.aii.ib.server.mapping.execution.SequenceMapping.executeStep(SequenceMapping.java:40) at com.sap.aii.ib.server.mapping.execution.Mapping.execute
    I have already checked with Basis and as per them JDK and Java versions are identical in Dev, QAS and Prod. It seems something is wrong with 'XI AF API' which we are calling from the channel. If we totally ignore Lookup process and send direct data, it is working fine. Target CC is also using Axis.
    Sequence in CC: afreq ->xireq ->wssec2 ->xires ->afres
    For any more information please let me know.
    Thanks,
    Nabendu.

    Hi Anupam,
    The Java Mapping code is same in Dev , QAS and Prod. Also the versions of the JAR is same.
    Please find the code below.
    package com.fi;
    import java.util.HashMap;
    import com.sap.aii.mapping.api.AbstractTrace;
    import com.sap.aii.mapping.api.AbstractTransformation;
    import com.sap.aii.mapping.api.StreamTransformation;
    import com.sap.aii.mapping.api.StreamTransformationConstants;
    import com.sap.aii.mapping.api.MappingTrace;
    import com.sap.aii.mapping.api.StreamTransformationException;
    import com.sap.aii.mapping.api.DynamicConfiguration;
    import com.sap.aii.mapping.api.DynamicConfigurationKey;
    import com.sap.aii.mapping.api.TransformationInput;
    import com.sap.aii.mapping.api.TransformationOutput;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.util.*;
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.parsers.ParserConfigurationException;
    import javax.xml.transform.Result;
    import javax.xml.transform.Source;
    import javax.xml.transform.Transformer;
    import javax.xml.transform.TransformerConfigurationException;
    import javax.xml.transform.TransformerException;
    import javax.xml.transform.TransformerFactory;
    import javax.xml.transform.dom.DOMSource;
    import javax.xml.transform.OutputKeys;
    import javax.xml.transform.stream.StreamResult;
    import org.w3c.dom.*;
    import org.w3c.dom.views.AbstractView;
    import org.xml.sax.SAXException;
    import java.io.ByteArrayInputStream;
    import com.sap.aii.mapping.lookup.*;
    /*import com.sap.aii.utilxi.hmis.server.HmisEnvironment.Accessor;
    //import com.sap.aii.utilxi.lock.api.LockServiceException;
    //import com.pmintl.pppimes.RFCLookup.javamapping.*;
    //import java.io.FileInputStream;
    //import java.io.FileOutputStream;*/
    import java.text.DateFormat;
    import java.text.SimpleDateFormat;
    //import java.text.ParseException;
    import java.util.Date;
    import java.io.*;
    public class FileIns_lookupLoad extends AbstractTransformation{
            private Map param = null;
            private AbstractTrace trace = getTrace();
            String senderService = null;
           String inParamChannel = null;
           String inParamBusService = null;
              //3. Each JAVA Mapping using program 7.1 API must implement the method
              // transform(TransformationInput in, TransformationOutput out)
              // as oppose to execute Method in earlier version.
               public void transform(TransformationInput arg0, TransformationOutput arg1) throws StreamTransformationException {
              // TODO Auto-generated method stub
              //4. An info message is added to trace. An instance of trace of object is obtained by calling
              // the getTrace method of class AbstractTransformation
                    inParamChannel = arg0.getInputParameters().getString("COMM_CHANNEL");
                    inParamBusService = arg0.getInputParameters().getString("BUS_SERVICE");
                    getTrace().addInfo("Input Parameter: " + inParamChannel);
                    getTrace().addInfo("Input Parameter: " + inParamBusService);
                    this.execute(arg0.getInputPayload().getInputStream(),
                          arg1.getOutputPayload().getOutputStream());
              //5. Input payload is obtained by using arg0.getInputPayload().getInputStream()
          * @param args
         public static void main(String[] args) {
                // TODO Auto-generated method stub
         public void execute(InputStream in, OutputStream out)
                   throws StreamTransformationException {
              // TODO Auto-generated method stub
              try
                   //Get The Trace
    //               trace = (AbstractTrace)param.get(StreamTransformationConstants.MAPPING_TRACE );
                   trace = getTrace();
                  getTrace().addInfo("Java Mapping Started");
                   DocumentBuilderFactory ifactory = DocumentBuilderFactory.newInstance();
                   DocumentBuilder ibuilder = ifactory.newDocumentBuilder();
                   Document IDoc  = ibuilder.parse(in);
                   Document TDoc = ibuilder.newDocument();
                   String mrnVal = "";
                   trace.addInfo("Preparing Target Doc");
                   Element message = TDoc.createElementNS("urn:Medtronic.com:CATS_Patient_Transactions","n1:Mt_Insurance");
                   Node tRoot = TDoc.appendChild(message);
                   //trace.addInfo(tRoot.getNodeName());
                   Element sRoot = (Element)IDoc.getFirstChild();
                   //trace.addInfo(sRoot.getNodeName());
                   NodeList nl = sRoot.getChildNodes();
               // trace.addInfo("Len"+nl.getLength());
    ////               for(int i=0;i<nl.getLength();i++)
    //                    Node n1 = TDoc.importNode(nl.item(i), true);
    //                    trace.addInfo("Adding Child Nodes");
    //                    trace.addInfo(nl.item(i).getNodeName());
    //                    tRoot.appendChild(n1);
                   NodeList lmrn = sRoot.getElementsByTagName("Mrn");
                   if(lmrn != null)
                        Node n1 = TDoc.importNode(lmrn.item(0), true);
                        Element e1 = (Element)lmrn.item(0);
                        //trace.addInfo(e1.getNodeName());
                        mrnVal = e1.getTextContent();
                        tRoot.appendChild(n1);
                   NodeList lfsc = sRoot.getElementsByTagName("Fsc");
                   if(lfsc != null)
                        for(int i=0;i<lfsc.getLength();i++){
                             Element n1=TDoc.createElement(lfsc.item(i).getNodeName());
                             tRoot.appendChild(n1);
                             Node fieldch = TDoc.createElement("Fields");
                             n1.appendChild(fieldch);
                             NodeList chl = lfsc.item(i).getChildNodes();
                             trace.addInfo("len11"+chl.getLength());
                             for(int j=0;j<chl.getLength();j++){
                                  if(!chl.item(j).getNodeName().equals("FscNumber")&&!chl.item(j).getNodeName().equals("Priority")){
                                       if(chl.item(j).hasChildNodes()){
                                            trace.addInfo(chl.item(j).getNodeName());
                                       Element fscfield = TDoc.createElement("FSCField");
                                       fieldch.appendChild(fscfield);
                                       NodeList FUQl = chl.item(j).getChildNodes();
                                       for(int p =0;p<FUQl.getLength();p++){
                                            //trace.addInfo(" i: "+i+" J: "+j+" P: "+p);
                                            if(FUQl.item(p).getNodeName().equals("FUQNumber")){
                                                 //Node tFUQ = TDoc.createElement("FUQNumber");
                                                 //tFUQ.setTextContent(FUQl.item(p).getTextContent());
                                                 fscfield.setAttribute("FUQNumber", FUQl.item(p).getTextContent());
                                            if(FUQl.item(p).getNodeName().equals("Value")){
                                                 Node tVal = TDoc.createElement("Value");
                                                 tVal.setTextContent(FUQl.item(p).getTextContent());
                                                 fscfield.appendChild(tVal);
                                                 //Node tName = TDoc.createElement("Field");
                                                 //tName.setTextContent(chl.item(j).getNodeName());
                                                 fscfield.setAttribute("Field", chl.item(j).getNodeName());
    //                                   Node fuqch = chl.item(j).getFirstChild();
    //                                   Node valch = fuqch.getNextSibling();
    //                                   if(fuqch!=null){
    //                                        Node tFUQ = TDoc.createElement("FUQNumber");
    //                                        tFUQ.setTextContent(fuqch.getTextContent());
    //                                        fscfield.appendChild(tFUQ);
    //                                   if(valch!=null){
    //                                        Node tVal = TDoc.createElement("Value");
    //                                        tVal.setTextContent(valch.getTextContent());
    //                                        fscfield.appendChild(tVal);
    //                                        Node tName = TDoc.createElement("Filed");
    //                                        tName.setTextContent(chl.item(j).getNodeName());
    //                                        fscfield.appendChild(tName);
                                  else{
                                       //Node numch =TDoc.importNode(chl.item(j), true);
                                       //Element e1 =(Element)n1;
                                       if(chl.item(j).getNodeName().equals("FscNumber")){
                                            n1.setAttribute("Number", chl.item(j).getTextContent());
                                       if(chl.item(j).getNodeName().equals("Priority")){
                                            n1.setAttribute("Priority", chl.item(j).getTextContent());
                             //tRoot.appendChild(lfsc.item(0));
    //                         Element e1 = (Element)lfsc.item(0);
    //                         trace.addInfo(e1.getNodeName());
    //                         mrnVal = e1.getNodeValue();
    /////Start of Look Up Code////
                   //Preparing Input String
                   String lookUpRequest = "<LoadPatientFullInsuranceDetail><Mrn>"+mrnVal+"</Mrn></LoadPatientFullInsuranceDetail>";
                   trace.addInfo("Request");
                   trace.addInfo(lookUpRequest);
                        SystemAccessor acc;
                        Channel channel;
                        Payload lookupResult;     
                        try
                             channel = LookupService.getChannel(inParamBusService, inParamChannel);
                             trace.addInfo("Got the channel");
                             acc = LookupService.getSystemAccessor(channel);
                             trace.addInfo("Got The Channel and Accessor");
                             InputStream ist = new ByteArrayInputStream(lookUpRequest.getBytes());
                             XmlPayload payload = LookupService.getXmlPayload(ist);
                             if(acc != null){
                                  trace.addInfo("Got The Channel and Accessor");
                                  trace.addInfo("Executing The Webservice");
                                  lookupResult = acc.call(payload);
                                  trace.addInfo("End of Executing The Webservice");
                                  trace.addInfo(lookupResult.toString());
                             if(lookUpRequest!=null){
                                  trace.addInfo("Responce is not null");
                                  InputStream rist = lookupResult.getContent();
                                  Document lresDoc = ibuilder.parse(rist);
                                  Node n1 = lresDoc.getFirstChild();
                                  trace.addInfo(n1.getNodeName());
                                  if(n1.getNodeName().endsWith("LoadPatientFullInsuranceDetailResponse"))
                                       Node ch1 = n1.getFirstChild();
                                       trace.addInfo(ch1.getNodeName());
                                       NodeList lookupnl = ch1.getChildNodes();
                                       //trace.add
                                       for(int i=0;i<lookupnl.getLength();i++)
                                            Node n2 = TDoc.importNode(lookupnl.item(i), true);
                                            trace.addInfo("Adding Child Nodes");
                                            trace.addInfo(lookupnl.item(i).getNodeName());
                                            tRoot.appendChild(n2);
                                  else{
                                  throw new StreamTransformationException("Error in Look Up"+n1.getTextContent());
                                   //while(ch1.hasChildNodes() && !ch1.getNodeName().equals("FSCS")){
                             else{
                                  trace.addWarning("Responce is null");
                                 throw new LookupException();
                        catch(LookupException le)
                             trace.addWarning("Some Thing Wrong in LookUp"+le.getMessage());
                             throw new StreamTransformationException("Look Up Failed");                         
                           Transformer transformer = TransformerFactory.newInstance().newTransformer();
    //                       StreamResult reqResult = new StreamResult(new StringWriter());
                           DOMSource source = new DOMSource(TDoc);
                           Result result = new StreamResult(out);
                           transformer.transform(source,result);
              catch(StreamTransformationException ste)
               throw new StreamTransformationException(ste.getMessage());
              catch(Exception e){
                   trace.addInfo(e.getMessage());
              finally{

  • Message Header value is not written to DynamicConfiguration

    Hi Forum,
    I have a scenario on a PI 7.11 SP06, where a SOAP message is sent via HTTP to a SAP WAS Java.
    The response contains in header a  parameter"set-cookie" which has to be written in dynamic configuration.
    For example: Set-Cookie: JSESSIONID=DF4D3F35636D8E3549490B678SAP9403229; Path=/
    Therefore, i use SOAP adapter with axis extension, but the "set-cookie" content is not written to dynamicconfiguration.
    Here is my axis adapter configuration. Do you see something wrong here?
    **Processing Sequence**
    1    AF_Adapters/axis/AFAdapterBean                afreq
    2    AF_Adapters/axis/HandlerBean                     xireq----------------------O/B Handler
    3    AF_Adapters/axis/HandlerBean                     trp--------------------------- HTTPSender
    4    AF_Adapters/axis/HandlerBean                     dcres----------------------This is for Dynamic Configuration (read)
    5    AF_Adapters/axis/HandlerBean                     xires------------------------O/BHandler
    6    AF_Adapters/axis/AFAdapterBean                afres
    **Module Configuration**
    dcres          handler.type     java:com.sap.aii.axis.xi.XI30DynamicConfigurationHandler
    dcres          key.1          read http://sap.com/xi/XI/System/HTTP SetCookie
    dcres          location.1      header
    dcres          value.1          set-cookie
    trp             handler.type     java:com.sap.aii.adapter.axis.ra.transport.http.HTTPSender
    trp             module.pivot     true
    xireq          handler.type     java:com.sap.aii.axis.xi.XI30OutboundHandler
    xires          handler.type     java:com.sap.aii.axis.xi.XI30OutboundHandler
    I followed the [How To Guide|http://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/b092777b-ee47-2a10-17b3-c5f59380957f] which is unfortunately for 7.0.
    Also i tried with "set-cookie" and "Set-Cookie" without success. I have written a small java test which is accessing
    this service and I can see parameter "set-cookie" in the header. So with small letters should be okay.
    I have also read this very similar [sdn thread|DynamicConfiguration to Message Header;.
    Tests with writing constants to dynamicconfiguration works without any problem.
    I'm not sure if i have the correct handler classes. Is there any documentation about the handlers?
    Any help is very appreciated.
    Thanks in forward and best regards,
    Sigi

    Hi all,
    thanks for response.
    I'm aware of these functions so I tried the test to create a dummy entry in header and read it from there.
    So first i used which wrote constant to ASMA
    dcres1     key.1    insert http://sap.com/xi/XI/System/HTTP dummy
    dcres1     value.1 12345
    Then  I used write to move that constant from ASMA to header
    dcres2     key.1   write http://sap.com/xi/XI/System/HTTP dummy
    dcres2     location.1  header
    dcres2     value.1  dummy
    Finally i used read on that dummy value, creating a new entry in ASMA based upon that dummy entry
    dcres3     key.1   read http://sap.com/xi/XI/System/HTTP SetCookie
    dcres3     location.1  header
    dcres3     value.1  dummy
    So the "read" entry is correct in my origin settings. So now I know that the "set-cookie" header parameter from Java WAS response is not passed through SOAP Axis adapter.
    Does anybody know if there are settings which have to be changed in system? Or is that a design as usual, that the set-cookie parameter is not passed to SOAP AXIS HTTP-header params?
    Thanks in forward and best regards,
    Sigi
    Edited by: Siegfried Ertl on Apr 13, 2011 3:06 PM

  • Dynamic conifguration for adapter module

    com.sap.aii.mapping.api.DynamicConfigurationKey
    Class used to create a key object for an adapter-specific attribute. The key object comprises the adapter namespace and the property name.
    &#9679;     com.sap.aii.mapping.api.DynamicConfiguration
    Class used to read, change, or delete the value of an adapter-specific attribute. In a method, you use objects of type DynamicConfigurationKey to access the attributes

    For Module Processors, check Adapter-Specific Message Attributes of the following link:
    http://help.sap.com/saphelp_nw2004s/helpdata/en/17/50d440e14f8431e10000000a1550b0/frameset.htm
    The methods to set/get Attributes in Adapter Module are:
    Message.setMessageProperty()
    Message.getMessageProperty()
    The following info can be obtained in javadoc:
    getMessageProperty
    public java.lang.String getMessageProperty(java.lang.String namespace,
                                               java.lang.String name)
        Returns the value of an additional message property, in case that such an value exists.
        Parameters:
            namespace - The namespace of the property to get.
            name - The name of the property to get.
        Returns:
            The value for the given namespace/name combination, or null, when no such value exists.
    setMessageProperty
    public void setMessageProperty(java.lang.String namespace,
                                   java.lang.String name,
                                   java.lang.String value)
                            throws InvalidParamException
        Sets an additional message field, if supported by the Message profile implementation. Such additional fields will not be visible as an own table column in the MS message monitoring, since it is to be stored as part of the message header. This mechanism allows different protocol implementations to support more message fiels, as per default available in the MS Message interface. Such fields can be accessed through this API method, without casting to the specific Message implementation.
        Parameters:
            namespace - The namespace of the property to set.
            name - The name of the property to set.
            value - The value of the property to set. When null is given as the value param, an already set value will be deleted.
        Throws:
            InvalidParamException - If either the length of one of the parameters is too long, or in case of an unknown/not allowed namespace/name combination (but only if the Message implementation has the necessary knowledge about the valid namespace/name pairs).
    Also, for an example, check the following blog:
    /people/daniel.graversen/blog/2006/10/05/dynamic-configuration-in-adapter-modules
    Regards,
    Henrique.

Maybe you are looking for