package org.xmlsh.json;
import javax.xml.namespace.QName;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamWriter;
import org.codehaus.stax2.util.StreamWriterDelegate;
import org.xmlsh.util.INamingStrategy;
import org.xmlsh.annotations.*;
public class XMLRewritingStreamWriter extends StreamWriterDelegate {
private INamingStrategy mNamingStrategy = INamingStrategy.DefaultNamingStrategy;
public XMLRewritingStreamWriter(XMLStreamWriter parentWriter) {
super(parentWriter);
}
@Override
public void writeEmptyElement(String local) throws XMLStreamException {
// TODO Auto-generated method stub
this.writeEmptyElement(null,local,null);
}
@Override
public void writeEmptyElement(String ns, String local)
throws XMLStreamException {
// TODO Auto-generated method stub
this.writeEmptyElement(null,local,ns);
}
@Override
public void writeEmptyElement(String prefix, String local, String ns)
throws XMLStreamException {
QName qn = mNamingStrategy.toXmlName(local);
super.writeEmptyElement(qn.getPrefix(), qn.getLocalPart(), qn.getNamespaceURI());
}
@Override
public void writeStartElement(String local) throws XMLStreamException {
// TODO Auto-generated method stub
this.writeStartElement(null,local,null);
}
@Override
public void writeStartElement(String ns, String local)
throws XMLStreamException {
// TODO Auto-generated method stub
this.writeStartElement(null,local,ns);
}
@Bug(value="Workaround for Saxon 9.5 problem in STAX writer - it will not create xmlns entries for you")
@Override
public void writeStartElement(String prefix, String local, String ns )
throws XMLStreamException {
QName qn = mNamingStrategy.toXmlName(local);
super.writeStartElement(qn.getPrefix(), qn.getLocalPart(), qn.getNamespaceURI());
if( qn.getPrefix() != null )
super.writeNamespace(qn.getPrefix(), qn.getNamespaceURI());
}
}