Program: 63616
Project: 63616
Buggy source:
private void writeElement(Element elem,String newNamespace,String newName,XMLStreamWriter xsw) throws XMLStreamException {
  String prefix=null;
  String namespace=null;
  String localName=null;
  String nodeName=null;
  if (newName != null) {
    namespace=newNamespace;
    localName=newName;
    nodeName=newName;
    if (newNamespace != null && newNamespace.length() > 0) {
      NamespaceResolver tempNR=new NamespaceResolver();
      tempNR.setDOM(elem);
      prefix=tempNR.resolveNamespaceURI(namespace);
      if (prefix == null || prefix.length() == 0) {
        String defaultNamespace=elem.getAttributeNS(javax.xml.XMLConstants.XMLNS_ATTRIBUTE_NS_URI,javax.xml.XMLConstants.XMLNS_ATTRIBUTE);
        if (defaultNamespace == null) {
          prefix=tempNR.generatePrefix();
        }
 else         if (defaultNamespace != namespace) {
          prefix=tempNR.generatePrefix();
        }
 else {
          prefix=Constants.EMPTY_STRING;
        }
      }
    }
  }
 else {
    prefix=elem.getPrefix();
    namespace=elem.getNamespaceURI();
    localName=elem.getLocalName();
    nodeName=elem.getNodeName();
  }
  if (prefix != null && prefix.length() > 0) {
    String namespaceURI=xsw.getNamespaceContext().getNamespaceURI(prefix);
    xsw.writeStartElement(prefix,localName,namespace);
    if (!(namespace.equals(namespaceURI))) {
      xsw.writeNamespace(prefix,namespace);
    }
  }
 else {
    if (namespace == null || namespace.length() == 0) {
      xsw.writeStartElement(nodeName);
      String defaultNamespace=xsw.getNamespaceContext().getNamespaceURI(Constants.EMPTY_STRING);
      if (defaultNamespace != null && defaultNamespace.length() > 0) {
        xsw.writeDefaultNamespace(Constants.EMPTY_STRING);
      }
    }
 else {
      xsw.writeStartElement(Constants.EMPTY_STRING,localName,namespace);
    }
  }
  NodeList childNodes=elem.getChildNodes();
  NamedNodeMap attrs=elem.getAttributes();
  ArrayList<Attr> nonNamespaceDeclAttrs=new ArrayList<Attr>();
  for (int i=0; i < attrs.getLength(); i++) {
    Attr next=(Attr)attrs.item(i);
    if (next.getNodeType() == Node.ATTRIBUTE_NODE) {
      Attr attribute=next;
      if (next.getPrefix() != null && next.getPrefix().equals(javax.xml.XMLConstants.XMLNS_ATTRIBUTE)) {
        String currentUri=xsw.getNamespaceContext().getNamespaceURI(next.getLocalName());
        if (currentUri == null || !currentUri.equals(next.getValue())) {
          xsw.writeNamespace(next.getLocalName(),next.getValue());
        }
      }
 else {
        if (next.getName().equals(javax.xml.XMLConstants.XMLNS_ATTRIBUTE)) {
          xsw.writeDefaultNamespace(next.getValue());
        }
 else {
          nonNamespaceDeclAttrs.add(attribute);
        }
      }
    }
  }
  for (  Attr next : nonNamespaceDeclAttrs) {
    if (next.getPrefix() == null) {
      xsw.writeAttribute(next.getName(),next.getValue());
    }
 else {
      xsw.writeAttribute(next.getPrefix(),next.getNamespaceURI(),next.getLocalName(),next.getValue());
    }
  }
  for (int i=0; i < childNodes.getLength(); i++) {
    Node next=childNodes.item(i);
    if (next.getNodeType() == Node.TEXT_NODE) {
      xsw.writeCharacters(((Text)next).getNodeValue());
    }
 else     if (next.getNodeType() == Node.CDATA_SECTION_NODE) {
      xsw.writeCData(next.getNodeValue());
    }
 else     if (next.getNodeType() == Node.COMMENT_NODE) {
      xsw.writeComment(next.getNodeValue());
    }
 else     if (next.getNodeType() == Node.ELEMENT_NODE) {
      writeElement((Element)next,null,null,xsw);
    }
  }
  xsw.writeEndElement();
}

Fixed version (ground truth):
private void writeElement(Element elem,String newNamespace,String newName,XMLStreamWriter xsw) throws XMLStreamException {
  String prefix=null;
  String namespace=null;
  String localName=null;
  String nodeName=null;
  if (newName != null) {
    namespace=newNamespace;
    localName=newName;
    nodeName=newName;
    if (newNamespace != null && newNamespace.length() > 0) {
      NamespaceResolver tempNR=new NamespaceResolver();
      tempNR.setDOM(elem);
      prefix=tempNR.resolveNamespaceURI(namespace);
      if (prefix == null || prefix.length() == 0) {
        String defaultNamespace=elem.getAttributeNS(javax.xml.XMLConstants.XMLNS_ATTRIBUTE_NS_URI,javax.xml.XMLConstants.XMLNS_ATTRIBUTE);
        if (defaultNamespace == null) {
          prefix=tempNR.generatePrefix();
        }
 else         if (defaultNamespace != namespace) {
          prefix=tempNR.generatePrefix();
        }
 else {
          prefix=Constants.EMPTY_STRING;
        }
      }
    }
  }
 else {
    prefix=elem.getPrefix();
    namespace=elem.getNamespaceURI();
    localName=elem.getLocalName();
    nodeName=elem.getNodeName();
  }
  String defaultNamespace=xsw.getNamespaceContext().getNamespaceURI(Constants.EMPTY_STRING);
  boolean needToAddDefaultNS=false;
  if (prefix != null && prefix.length() > 0) {
    String namespaceURI=xsw.getNamespaceContext().getNamespaceURI(prefix);
    xsw.writeStartElement(prefix,localName,namespace);
    if (!(namespace.equals(namespaceURI))) {
      xsw.writeNamespace(prefix,namespace);
    }
  }
 else {
    if (namespace == null || namespace.length() == 0) {
      xsw.writeStartElement(nodeName);
      if (defaultNamespace != null && defaultNamespace.length() > 0) {
        xsw.writeDefaultNamespace(Constants.EMPTY_STRING);
      }
    }
 else {
      needToAddDefaultNS=true;
      xsw.writeStartElement(Constants.EMPTY_STRING,localName,namespace);
    }
  }
  NodeList childNodes=elem.getChildNodes();
  NamedNodeMap attrs=elem.getAttributes();
  ArrayList<Attr> nonNamespaceDeclAttrs=new ArrayList<Attr>();
  for (int i=0; i < attrs.getLength(); i++) {
    Attr next=(Attr)attrs.item(i);
    if (next.getNodeType() == Node.ATTRIBUTE_NODE) {
      Attr attribute=next;
      if (next.getPrefix() != null && next.getPrefix().equals(javax.xml.XMLConstants.XMLNS_ATTRIBUTE)) {
        String currentUri=xsw.getNamespaceContext().getNamespaceURI(next.getLocalName());
        if (currentUri == null || !currentUri.equals(next.getValue())) {
          xsw.writeNamespace(next.getLocalName(),next.getValue());
        }
      }
 else {
        if (next.getName().equals(javax.xml.XMLConstants.XMLNS_ATTRIBUTE)) {
          xsw.writeDefaultNamespace(next.getValue());
          needToAddDefaultNS=false;
        }
 else {
          nonNamespaceDeclAttrs.add(attribute);
        }
      }
    }
  }
  if (needToAddDefaultNS) {
    if (defaultNamespace == null || !defaultNamespace.equals(namespace)) {
      xsw.writeDefaultNamespace(namespace);
    }
  }
  for (  Attr next : nonNamespaceDeclAttrs) {
    if (next.getPrefix() == null) {
      xsw.writeAttribute(next.getName(),next.getValue());
    }
 else {
      xsw.writeAttribute(next.getPrefix(),next.getNamespaceURI(),next.getLocalName(),next.getValue());
    }
  }
  for (int i=0; i < childNodes.getLength(); i++) {
    Node next=childNodes.item(i);
    if (next.getNodeType() == Node.TEXT_NODE) {
      xsw.writeCharacters(((Text)next).getNodeValue());
    }
 else     if (next.getNodeType() == Node.CDATA_SECTION_NODE) {
      xsw.writeCData(next.getNodeValue());
    }
 else     if (next.getNodeType() == Node.COMMENT_NODE) {
      xsw.writeComment(next.getNodeValue());
    }
 else     if (next.getNodeType() == Node.ELEMENT_NODE) {
      writeElement((Element)next,null,null,xsw);
    }
  }
  xsw.writeEndElement();
}