package de.kp.wsclient.xml; import java.io.OutputStream; import java.util.Properties; import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerConfigurationException; 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; import de.kp.wsclient.util.StringOutputStream; /** * This class supports the serialization of a certain * W3C DOM document * * @author Stefan Krusche (krusche@dr-kruscheundpartner.de) * */ public class XMLSerializer { /** * @param xmlDoc * @return */ public static String serialize(Document xmlDoc) { String xml = null; try { TransformerFactory factory = TransformerFactory.newInstance(); Transformer transformer = factory.newTransformer(); Properties outFormat = new Properties(); // IMPORTANT: it is essential, that no indents are to be created, as this // this corrupts the signature element; this situation MUST be avoided // by using no indentation outFormat.setProperty( OutputKeys.INDENT, "no" ); outFormat.setProperty( OutputKeys.METHOD, "xml" ); outFormat.setProperty( OutputKeys.OMIT_XML_DECLARATION, "no" ); outFormat.setProperty( OutputKeys.VERSION, "1.0" ); outFormat.setProperty( OutputKeys.ENCODING, "UTF-8" ); transformer.setOutputProperties( outFormat ); DOMSource domSource = new DOMSource(xmlDoc.getDocumentElement()); OutputStream output = new StringOutputStream(); StreamResult result = new StreamResult( output ); transformer.transform( domSource, result ); xml = output.toString(); } catch (TransformerConfigurationException e) { e.printStackTrace(); } catch (TransformerException e) { e.printStackTrace(); } return xml; } }