import java.io.ByteArrayInputStream;
import java.io.StringWriter;
import java.io.UnsupportedEncodingException;

import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;

public class JI9049161 {
	private static final String INPUT_XML = "<a><b>123</b><c/></a>"; 

    public static void main(String[] args) throws Exception { 
        TransformerFactory transformerFactory = 
                new com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl(); 

        // run #1 
        Transformer transformer = transformerFactory.newTransformer(); 

        setDefaultOutputProperties(transformer); 
        String outputXml1 = transform(INPUT_XML, transformer); 
        System.out.println("#1 output XML: " + outputXml1); 

        // run #2 
        transformer.reset(); 

        setDefaultOutputProperties(transformer); 
        // use different output properties in run #2 (after the 1st reset): 
        transformer.setOutputProperty(OutputKeys.INDENT, "yes"); 
        String outputXml2 = transform(INPUT_XML, transformer); 
        System.out.println("#2 output XML: " + outputXml2); 

        // run #3 
        transformer.reset(); 

        setDefaultOutputProperties(transformer); 
        // use same output properties as run #1 => expect same output 
        String outputXml3 = transform(INPUT_XML, transformer); 
        System.out.println("#3 output XML: " + outputXml3); 

        if (!outputXml3.equals(outputXml1)) { 
            System.err.println("Incorrect XML; expected was: '" + outputXml1 + "'"); 
        } 
    } 

    private static void setDefaultOutputProperties(Transformer transformer) { 
        transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); 
        transformer.setOutputProperty(OutputKeys.METHOD, "xml"); 
        transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); 
    } 

    private static String transform(String xml, Transformer transformer) 
            throws TransformerException, UnsupportedEncodingException { 
        StringWriter writer = new StringWriter(); 
        transformer.transform(new StreamSource(new ByteArrayInputStream(xml.getBytes("UTF-8"))), 
                              new StreamResult(writer)); 
        return writer.toString(); 
    } 

}
