Olá a todos,
Estou usando o seguinte código e está convertendo uma string base64 em bytes e o mensagem também está sendo processada corretamente, e o arquivo com o adaptador de arquivo do receptor está sendo enviado para o local de destino, mas o arquivo jpg de destino está em branco.
Abaixo está o código que estou usando: -
import java.io.InputStream;
import java.io.OutputStream;
import com.sap.aii.mapping.api.AbstractTransformation;
import com.sap.aii.mapping.api.StreamTransformationException;
import com.sap.aii.mapping.api.TransformationInput;
import com.sap.aii.mapping.api.TransformationOutput;
import javax.xml.bind.DatatypeConverter;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
public class Decoder extends AbstractTransformation {
@Override
public void transform(TransformationInput in, TransformationOutput out) throws StreamTransformationException {
String encodedString = null;
Node encodedStringNode;
try{
//Leia cargas úteis de entrada e saída.
InputStream inputStream = in.getInputPayload().getInputStream();
OutputStream outputStream = out.getOutputPayload().getOutputStream();
//Crie uma nova instância da fábrica de árvores DOM
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
//Crie uma nova instância para obter um documento DOM a partir de XML.
DocumentBuilder builder = factory.newDocumentBuilder();
//Obtenha um novo documento DOM a partir do XML de inputStream.
Document doc = builder.parse(inputStream);
//Obtenha o nó XML 'Base64EncodedString' da mensagem de origem.
encodedStringNode = doc.getElementsByTagName("Base64Str").item(0);
//Obtenha o valor da string base64 do elemento XML 'Base64Str' da mensagem de origem.
encodedString = encodedStringNode.getFirstChild().getNodeValue();
//Decodificar string base64 para texto.
//byte[] decodedBytes = Base64.getDecoder().decode(encodedString);
//String decodedString = new String(decodedBytes);
byte[] bytesDecoded = DatatypeConverter.parseBase64Binary(encodedString);
System.out.println("O valor decodificado é " + new String(bytesDecoded));
String strDecoded=new String(bytesDecoded);
//Derivar mensagem XML de saída (destino).
// outputStream.write(("<?xml version=\"1.0\" encoding=\"UTF-8\"?><ns1:Base64DecodedString xmlns:ns1=\"urn:Target_System:DecodedString\"><Base64DecodedString>"+decodedString+"</Base64DecodedString></ns1:Base64DecodedString>").getBytes());
outputStream.write(strDecoded.getBytes());
} catch (Exception exception) {
getTrace().addDebugMessage(exception.getMessage());
throw new StreamTransformationException(exception.toString());
}
}
}
Anexo está a carga útil que eu acionei para RWB para testar este cenário.
testfile.txt
bytecode-conversion-after-om-execution.jpg
Basicamente há algum problema pelo qual o arquivo jpg de destino aparece em branco.
Poderia me ajudar por favor se houver algo que precise ser adicionado ao código para converter esta string base64 em uma imagem ou qualquer outra coisa que esteja faltando aqui?
testfile.txt
bytecode-conversion-after-om-execution.jpg
Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019