Search code examples
javaxmldependenciesxerces

Change the com.sun.org.apache.xml.internal.serialize.XMLSerializer & com.sun.org.apache.xml.internal.serialize.OutputFormat


Using com.sun.org.apache.xml.internal.serialize.XMLSerializer and com.sun.org.apache.xml.internal.serialize.OutputFormat causes some errors when compiling using java 1.6. The solution I found is by using org.apache.xml.serialize.XMLSerializer and org.apache.xml.serialize.OutputFormat after adding xerces. The problem is that theses classes are deprecated. What can I use without to replace them without touching the code ? Thnx This is the dependency I used :

<dependency>
    <groupId>xerces</groupId>
    <artifactId>xercesImpl</artifactId>
    <version>2.9.1</version>
</dependency>

Solution

  • We can use the LSSerializer class from the package org.w3c.dom.ls

    public String toXML(Node source) {
    
        String subscrXML=null;
        StringWriter stringWriter=new StringWriter();
         try {
            //Get the implementations
    
            DOMImplementationRegistry registry =  DOMImplementationRegistry.newInstance();
    
            DOMImplementationLS impls =  (DOMImplementationLS)registry.getDOMImplementation("LS");
    
    
            //Prepare the output
            LSOutput domOutput = impls.createLSOutput();
            domOutput.setEncoding(java.nio.charset.Charset.defaultCharset().name());            
            domOutput.setCharacterStream(stringWriter);
            domOutput.setEncoding(ENCODING);
            //Prepare the serializer
            LSSerializer domWriter = impls.createLSSerializer();            
            DOMConfiguration domConfig = domWriter.getDomConfig();
            domConfig.setParameter("format-pretty-print", true);
            domConfig.setParameter("element-content-whitespace", true);
            domWriter.setNewLine("\r\n");     
            domConfig.setParameter("cdata-sections", Boolean.TRUE);
            //And finaly, write
            domWriter.write(source, domOutput);
            subscrXML = domOutput.getCharacterStream().toString();
            DOMStringList dsl=domConfig.getParameterNames();
            System.out.println(subscrXML);
            /*
             // Just for curiosity.... 
             for(int i=0;i<dsl.getLength();i){
                System.out.println(dsl.item(i)" = ["domConfig.getParameter(dsl.item(i))"]");
            }*/
         } catch (Exception e) {
             e.printStackTrace();
         }
        return subscrXML;
     }