Hola a todos,
Estoy utilizando el siguiente código y está convirtiendo una cadena base64 en bytes y el mensaje también se está procesando correctamente, y el archivo con el adaptador de archivo del receptor se está enviando a la ubicación de destino, pero el archivo jpg de destino está en blanco.
A continuación se muestra el código que estoy utilizando: -
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{
//Leer cargas útiles de entrada y salida.
InputStream inputStream = in.getInputPayload().getInputStream();
OutputStream outputStream = out.getOutputPayload().getOutputStream();
//Crea una nueva instancia de la fábrica de árboles DOM
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
//Crea una nueva instancia para obtener un documento DOM a partir de XML.
DocumentBuilder builder = factory.newDocumentBuilder();
//Obtener un nuevo documento DOM a partir de XML de inputStream.
Document doc = builder.parse(inputStream);
//Obtener el nodo XML 'Base64EncodedString' del mensaje fuente.
encodedStringNode = doc.getElementsByTagName("Base64Str").item(0);
//Obtener el valor de cadena base64 del elemento XML 'Base64Str' del mensaje fuente.
encodedString = encodedStringNode.getFirstChild().getNodeValue();
//Decodificar cadena base64 a texto.
//byte[] decodedBytes = Base64.getDecoder().decode(encodedString);
//String decodedString = new String(decodedBytes);
byte[] bytesDecoded = DatatypeConverter.parseBase64Binary(encodedString);
System.out.println("El valor decodificado es " + new String(bytesDecoded));
String strDecoded=new String(bytesDecoded);
//Derivar mensaje XML de salida (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());
}
}
}
Adjunto está la carga útil que disparo para RWB para probar este escenario.
testfile.txt
bytecode-conversion-after-om-execution.jpg
Básicamente hay algún problema por el cual el archivo jpg de destino aparece en blanco.
¿Podrías ayudarme por favor si hay algo que necesite ser agregado al código para convertir esta cadena base64 en una imagen o cualquier otra cosa que me esté faltando aquí?
testfile.txt
bytecode-conversion-after-om-execution.jpg
Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019