Existe algumas maneiras de fazer um mapa entre mensagens, uma delas é você utilizar um javaMapping.
2 - Criar dois Message Type.
3 - Criar duas Message Interface.
4 - Criar um Imported Archive e importar o .class compactado no formato ZIP.
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Map;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import com.sap.aii.mapping.api.StreamTransformation;
import com.sap.aii.mapping.api.StreamTransformationException;
public class JavaMappingBlog1 implements StreamTransformation{
private static final String EXCEPTION = "An exception occured: ";
private static final String CAB = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
private static final String OrigBeg = "<MT_Origem";
private static final String OrigEnd = "</MT_Origem>";
private static final String MenBeg = "<ns0:MT_Destino xmlns:ns0=\"http://javamapping.com\">";
private static final String MenEnd = "</ns0:MT_Destino>";
private static final String RowBeg = "<row>";
private static final String RowEnd = "</row>";
// Método para buscar um valor em uma TAG dentro de um NodeList
public static String recuperaNode(Node node, String campo) {
String result="";
Element elmnt = (Element) node;
NodeList elmntLst = elmnt.getElementsByTagName(campo);
Element elmnt2 = (Element) elmntLst.item(0);
NodeList key = elmnt2.getChildNodes();
if (key.getLength()==0) result="";
else result = ((Node) key.item(0)).getNodeValue();
return result;
}
public void setParameter(Map arg0) {}
public void execute(InputStream in, OutputStream out) throws StreamTransformationException {
final String UTF8 = "UTF-8";
ByteArrayOutputStream baos = new ByteArrayOutputStream();
String inStr="", r1="";
String nome="", sobrenome="", idade="";
int c = -1, s = 0, e = 0;
try {
while ((c = in.read()) != -1)
baos.write(c);
inStr = baos.toString(UTF8);
// Remover alguns caracteres e substituir alguns.
// Coloquei uma imagem porque o HTML estava convertendo tudo
// procurando na string o inicio o e fim da mensagem
s = inStr.indexOf(OrigBeg); e = inStr.indexOf(OrigEnd);
// pegando o inicio e o fim e convertendo para um InputStream
r1 = inStr.substring(s, e+OrigEnd.length());
InputStream row1 = new ByteArrayInputStream(r1.getBytes("UTF-8"));
// Gerar o NodeList
DocumentBuilderFactory dbf1 = DocumentBuilderFactory.newInstance();
DocumentBuilder db1 = dbf1.newDocumentBuilder();
Document doc1 = db1.parse(row1);
doc1.getDocumentElement().normalize();
// Especificar o elemento para realizar o loop
NodeList nodeLst1 = doc1.getElementsByTagName("row");
inStr = "";
if (nodeLst1!=null){
for (int cont = 0; cont < nodeLst1.getLength(); cont++) {
Node fstNode = nodeLst1.item(cont);
if (fstNode.getNodeType() == Node.ELEMENT_NODE) {
// busca o valor da TAG
nome = recuperaNode(fstNode, "nome");
sobrenome = recuperaNode(fstNode, "sobrenome");
idade = recuperaNode(fstNode, "idade");
// Monta o a TAG row de saída
inStr = inStr + RowBeg + "<nomeComleto>" + nome + " " + sobrenome + "</nomeComleto>" + "<idade>" + idade + "</idade>" + RowEnd;
}
}
}
// Monta a mensagem de saída
inStr = CAB + MenBeg + inStr + MenEnd;
out.write(inStr.getBytes(UTF8));
}
catch (Exception exception){
throw new StreamTransformationException(EXCEPTION + exception.getMessage());
}
}
public static void main(String[] args) {
final String INPUT = "/Users/kaleokuntgen/Compartilhada/blog1.xml";
final String OUTPUT = "/Users/kaleokuntgen/Compartilhada/blog1_resp.xml";
try {
JavaMappingBlog1 JavaMappingBlog1 = new JavaMappingBlog1();
InputStream input = new FileInputStream(INPUT);
OutputStream output = new FileOutputStream(OUTPUT);
JavaMappingBlog1.execute(input, output);
input.close();
output.flush();
output.close();
}
catch (Exception e) {
e.printStackTrace();
}
}
}
6 - Entre na aba "Test" para verificar o mapeamento.