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