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

Описание org.w3c.dom.Node .insertBefore из Android-SDK скажите следующее:

общедоступный абстрактный узел insertBefore (узел newChild, узел refChild)
Вставляет узел newChild перед существующим дочерним узлом refChild. Если refChild имеет значение null, вставьте newChild в конец списка дочерних элементов.

Но если я сделаю следующее, я получу исключение NullPointerException, которое возникает в реализации 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)

Я пробовал это с Android 2.2 и Android 2.3.3!
Для меня это ошибка. Кто-нибудь может подтвердить / воспроизвести это?


// редактировать (18.01.2012 13:05):
Я создал новый java-проект, потому что хотел посмотреть, работает ли это в 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();
        }
    }

Этот код работает отлично.

Я также создал новый проект Android, чтобы проверить это снова:

@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();
    }
}

Когда приложение достигает insertBefore, генерируется исключение, показанное выше.

Таким образом, тот же код работает в обычной Java, но не в Android. Мне все еще кажется, что это ошибка в реализации гармонии apache org.w3c.dom. Есть еще идеи?

6
задан Marc 18 January 2012 в 13:06
поделиться