org.w3c.dom.Node.insertBefore: NullPointerException, Bug?

A descrição do org.w3c.dom.Node.insertAntes do SDK do Android, diga o seguinte:

public abstract Node insertBefore (Node newChild, Node refChild)<br>Inserts the node newChild before the existing child node refChild. <strong>If refChild is null, insert newChild at the end of the list of children.</strong>

Mas se eu fizer o seguinte, recebo NullPointerException que ocorre na implementação insertBefore:

if(doc != null && doc.getFirstChild() != null && tmpNode != null)
    doc.getFirstChild().insertBefore(tmpNode, null);

WARN/System.err(11029): at org.apache.harmony.xml.dom.InnerNodeImpl.insertBefore(InnerNodeImpl.java:86)

Tentei isso com o Android 2.2 e o Android 2.3.3!
Para mim, parece ser um bug. Alguém pode confirmar / reproduzir isso?


// edit (18.01.2012 13:05):
Criei um novo projeto java, porque queria ver se isso funciona em um aplicativo java:

public static void main(String[] args) {
    DocumentBuilderFactory dbfac = DocumentBuilderFactory.newInstance();
    DocumentBuilder docBuilder;

        try {
            docBuilder = dbfac.newDocumentBuilder();
            Document d = docBuilder.newDocument();

            if(d != null){
                d.appendChild(d.createElement("root"));
                if(d.getFirstChild() != null){
                    d.getFirstChild().insertBefore(d.createElement("foo"), null);
                    System.out.println(d.getFirstChild().getFirstChild().getNodeName());
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

Este código funciona perfeitament

Também criei um novo projeto Android para testar isso novamente:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    DocumentBuilderFactory dbfac = DocumentBuilderFactory.newInstance();
    DocumentBuilder docBuilder;

    try {
        docBuilder = dbfac.newDocumentBuilder();
        Document d = docBuilder.newDocument();

        if(d != null){
            d.appendChild(d.createElement("root"));
            if(d.getFirstChild() != null){
                d.getFirstChild().insertBefore(d.createElement("foo"), null);
                System.out.println(d.getFirstChild().getFirstChild().getNodeName());
            }
        }
    } catch (Exception e2) {
        e2.printStackTrace();
    }
}

Quando o aplicativo atinge o insertBefore, a exceção mostrada acima é lançad

Portanto, o mesmo código funciona em Java normal, mas não no Android. Para mim, ainda parece que é um bug na implementação da harmonia apache do org.w3c.dom. Alguma outra idéia?

questionAnswers(6)

yourAnswerToTheQuestion