
En algún desarrollo, para poder cifrar un XML utilizando el API de apache santuario (The Apache XML Security), necesite convertir el String XML a Objeto org.w3c.dom.Document, requerido en la funcionalidad de “EncryptedKey” (Después creare una entrada utilizando The Apache XML Security).
Las líneas necesarias para pasar de String XML a org.w3c.dom.Document son:
import java.io.StringReader;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
public class Ejemplo {
/**
* xml="<Padre><nodo>valor 1</nodo><nodo>valor 2</nodo></Padre>"
*/
public Document getObjetoDocument(String xml) {
Document xmlDocumentEncriptar = null;
try {
DocumentBuilder db = DocumentBuilderFactory.newInstance()
.newDocumentBuilder();
xmlDocumentEncriptar = db.parse(new InputSource(
new StringReader(xml)));
} catch (Exception e) {
Logger.getLogger(Ejemplo.class.getName()).log(Level.SEVERE, null, e);
}
return xmlDocumentEncriptar;
}
}
Ahora las líneas necesarias para pasar de objeto org.w3c.dom.Document a String XML son:
import java.io.StringWriter;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
public class Ejemplo {
public String convertirDocument(Document documentoXml)
throws Exception {
String resultadoXML = "";
try {
DOMSource domSource = new DOMSource(documentoXml);
StringWriter writer = new StringWriter();
StreamResult result = new StreamResult(writer);
TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer = tf.newTransformer();
transformer.transform(domSource, result);
resultadoXML = writer.toString();
} catch (TransformerException e) {
throw new Exception(e.getMessage(), e);
}
return resultadoXML;
}
}
Espero me haya hecho entender, cualquier inquietud no dudes en contactarme. Buen día