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