Hi,
Por favor, intenta este código.
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import com.sap.aii.mapping.api.AbstractTransformation;
import com.sap.aii.mapping.api.TransformationInput;
import com.sap.aii.mapping.api.TransformationOutput;
import com.sap.aii.mapping.api.StreamTransformationException;
public class GenerateSOAPHeader extends AbstractTransformation {
public void encoding(InputStream in,OutputStream out) throws StreamTransformationException
{
try
{
String outputPayload = new String();
String inputPayload = new String();
String newEncoding="ISO-8859-1";
inputPayload = convertInputStreamToString(in);
outputPayload = new String(inputPayload.getBytes(newEncoding),newEncoding);
out.write(outputPayload.getBytes(newEncoding));
}
catch(Exception e)
{
throw new StreamTransformationException(e.getMessage());
}
}
public void transform(TransformationInput in, TransformationOutput out)
throws StreamTransformationException {
this.encoding(in.getInputPayload().getInputStream(), out.getOutputPayload().getOutputStream()) ;
}
public String convertInputStreamToString(InputStream
Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
Hola Stefan,
¿Podrías ayudarme con tu código, por favor? Estoy teniendo un problema similar. He escrito un mapeo en Java para agregar un encabezado y un registro final al contenido del archivo. Ahora tengo problemas al manejar el carácter especial - ’ (esto en realidad no es el apóstrofe) y se convierte en un valor desconocido - ’sÂ.
Aquí está mi código, ¿podrías decirme dónde debo insertar tu código mencionado anteriormente?
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.io.UnsupportedEncodingException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import com.sap.aii.mapping.api.AbstractTransformation;
import com.sap.aii.mapping.api.DynamicConfiguration;
import com.sap.aii.mapping.api.DynamicConfigurationKey;
import com.sap.aii.mapping.api.StreamTransformationException;
import com.sap.aii.mapping.api.TransformationInput;
import com.sap.aii.mapping.api.TransformationOutput;
public class renameAD_APD_File extends AbstractTransformation {
private static final DynamicConfigurationKey KEY_FILENAME_AS2 =
DynamicConfigurationKey.create(" http://seeburger.com/xi/common/dtAS2FileName ", "DYNFILENAME");
private static final DynamicConfigurationKey KEY_FILENAME_FILE =
DynamicConfigurationKey.create(" http://sap.com/xi/XI/System/File ","FileName");
public void transform(TransformationInput arg0, TransformationOutput arg1)
throws StreamTransformationException {
// TODO Auto-generated method stub
String newFileName = null;
DateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmssSSS");
Date date = new Date();
String output = null;
String strFileContent = null;
DynamicConfiguration conf = arg0.getDynamicConfiguration();
String oldValue = conf.get(KEY_FILENAME_FILE);
oldValue = oldValue.replaceAll(".dat","");
String newValue = "Outbound_" + dateFormat.format(date) + ".dat";
String inData = convertStreamToString(arg0.getInputPayload().getInputStream());
String header = "000000000000" + dateFormat.format(date) + "V3.0ITEM"; // la cadena de encabezado
String trailer = "999999999999"; // la cadena de registro final
String outData = header + "\n"+ inData + trailer + "\n" ; // carga final para ser escrita de vuelta
try
{
//La carga de salida del mapeo JAVA se devuelve usando la clase TransformationOutput
arg1.getOutputPayload().getOutputStream().write(outData.getBytes("UTF-8"));
conf.put(KEY_FILENAME_AS2,newValue);
}
catch(Exception exception1) { }
}
public String convertStreamToString(InputStream in){
StringBuffer
Creo que el problema surge al agregar un byte a un búfer de cadena. Entonces, cuando tienes un carácter de 2 bytes, se añade dos veces al búfer de cadena.
Tuve una tarea similar y utilicé el siguiente código:
// convertir InputStream a String
byte[] bbuf = new byte[in.available()];
int bblen = in.read(bbuf);
String inputConverted = new String(bbuf,"UTF-8");
inputConverted = inputConverted.replaceAll("<\\?xml version=\"1\\.0\" encoding=\"UTF-8\"\\?>","");
Así que primero creo un array de bytes y lo transformo a una cadena de una vez.