¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Problema de codificación de caracteres en mapeo JAVA: Solución con código Java

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 23 Vistas
0
Cargando...

Hola,

Tengo un problema con la codificación de caracteres en mapeos JAVA.

He configurado un simple mapeo JAVA que solo lee el flujo de entrada y lo pasa al flujo de salida.

A continuación, el código java:


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.util.Map;

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

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

public class GenerateSOAPHeader extends AbstractTransformation {
	
	public void transform(TransformationInput in, TransformationOutput out)
			throws StreamTransformationException {

		String outputPayload = new String();
		String inputPayload = new String();
		try {
			// read input payload from stream
			inputPayload = convertInputStreamToString(in.getInputPayload()
					.getInputStream());
		} catch (Exception e) {
			throw new StreamTransformationException(e.getMessage());
		}
		
		outputPayload = inputPayload;

		try {
			// write output payload to stream			
			out.getOutputPayload().getOutputStream().write(outputPayload.getBytes());		
		} catch (IOException e) {
			throw new StreamTransformationException(e.getMessage());
		}

	}

	public void setParameter(Map arg0) {
		// TODO Auto-generated method stub

	}

	public String convertInputStreamToString(InputStream in) 
                
                
Pedro Pascal
Se unió el 07/03/2018
Pinterest
Telegram
Linkedin
Whatsapp

3 Respuestas

0
Cargando...

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
0
Cargando...

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

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

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.

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019

contacto@primeinstitute.com

(+51) 1641 9379
(+57) 1489 6964

© 2024 Copyright. Todos los derechos reservados.

Desarrollado por Prime Institute

¡Hola! Soy Diana, asesora académica de Prime Institute, indícame en que curso estas interesado, saludos!
Hola ¿Puedo ayudarte?