¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Problema de codificação de caracteres no mapeamento JAVA: Solução com código Java

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

Olá,

Estou com um problema na codificação de caracteres em mapeamentos JAVA.

Configurei um mapeamento JAVA simples que apenas lê o fluxo de entrada e o passa para o fluxo de saída.

Abaixo está o 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...

Olá,

Por favor, tente 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...

Olá Stefan,

¿Poderias ajudar-me com o teu código, por favor? Estou a ter um problema semelhante. Escrevi um mapeamento em Java para adicionar um cabeçalho e um registo final ao conteúdo do ficheiro. Agora estou a ter problemas ao lidar com o caráter especial - í (isto na realidade não é o apóstrofo) e converte-se num valor desconhecido - ‚Äôs¬.

Aqui está o meu código, poderias dizer-me onde devo inserir o teu 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";† // a cadeia de cabeçalho

String trailer = "999999999999";†† // a cadeia de registo final

String outData = header + "\n"+ inData + trailer + "\n" ;†† // carga final para ser escrita de volta

try

{

//A carga de saída do mapeamento JAVA é devolvida usando a classe 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...

Acredito que o problema ocorre ao adicionar um byte a um buffer de string. Assim, quando você tem um caractere de 2 bytes, ele é adicionado duas vezes ao buffer de string.

Eu tive uma tarefa semelhante e usei o seguinte código:

			// converter InputStream para 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\"\\?>","");

Então, primeiro crio um array de bytes e o transformo em uma string de uma 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?