cancel
Showing results for 
Search instead for 
Did you mean: 
Subscribe

Hi Experts,

I have a file to file scenario in which i have to pickup a ".CSV" file and transfer it as it is to another location in SAP PI 7.1 .The challenge is that i have to add a UTF-8 BOM . So, i followed the below steps :

1)Create a data type, message  for input and output  with dummy structure.

Both input and output Message type the similar structure as below.

2) Two service interfaces , one for inbound and another for outbound  as in any normal scenario.

3)Operational mapping with a java mapping class to add UTF-8 BOM

public class AddBOM  implements StreamTransformation  {

  private Map  param = null;

  private MappingTrace trace = null;

  public void execute(InputStream inStream, OutputStream outStream)

  throws StreamTransformationException {

  // TODO Auto-generated method stub

//BufferedReader to read inputStream

BufferedReader br=new BufferedReader(new InputStreamReader(inStream));

//Trace object declaration

AbstractTrace trace = null;

    trace =

    (AbstractTrace) param.get(

        StreamTransformationConstants.MAPPING_TRACE);

  String reading=null;

  StringBuffer buf=new StringBuffer();

  String CSV_content;

  try

  {

  while((reading=br.readLine())!=null)

  {

  buf.append(reading);

  buf.append(System.getProperty("line.separator"));

  }

  CSV_content=buf.toString();

  //Character array to add UTF-8 BOM in CSV

  char[] c = {0xEF, 0xBB, 0xBF};

  for(int i=0; i<3; i++)

  {

  outStream.write(c[i]);

  }

  outStream.write(CSV_content.getBytes());

  outStream.flush();

  }

  catch (Exception e) {

  // TODO: handle exception

  trace.addDebugMessage(e.getMessage());

  }

  }

  public void setParameter(Map Param) {

  // TODO Auto-generated method stub

  if (param == null) {

         this.param = new HashMap();

     }

  }

  }

4. Created an ICO with OM implementing the above java mapping.

But, when the scenario is tested it throws me an error  "Error.com.sap.aii.adapter.xi.routing.RoutingException:Unable to parse XML message payload to extract operation for receiver determinationorg.xml.sax.SAXParseException:Content is not allowed in prolog" .

Can you experts kindly help me  to know if this adding BOM is possible only if i do FCC forming the exact XML structure and is there any possibility to add BOM using java mapping without converting using FCC as i am not doing any change between source and target .csv files except adding this BOM .

0 Likes
View Entire Topic
RaghuVamseedhar
Active Contributor
0 Likes

Dhinesh,

Steps in ESR Link.

Java Mapping.


package com.map;

import com.sap.aii.mapping.api.*;

import java.io.*;

public class Transform_JavaMapping extends AbstractTransformation {

    @Override

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

        try {

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

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

            //Just copy Input file content to Output file content

            byte[] b = new byte[inputstream.available()];

            inputstream.read(b);

            outputstream.write('\ufeff'); //Add BOM at starting of stream.

            outputstream.write(b);

        } catch (Exception exception) {

            getTrace().addDebugMessage(exception.getMessage());

            throw new StreamTransformationException(exception.toString());

        }

    }

}

Former Member
0 Likes

Hi Raghu,

Thanks for your reply. I think we add "\uFEFF" for UTF-16 (BE )

reference Link : Handle UTF8 file with BOM - Real's Java How-to