2010-02-15 5 views
1

Le cloneNode() dans l'exemple minimale suivante fonctionne sur Java 1.6, mais jette un DOMException avec le code 14 sous Android 5.DOMException Cloner méthode XML Node

Code 14 selon sdk docs signifie: « NAMESPACE_ERR Si une tentative est faite pour créer ou modifier un objet d'une manière qui est incorrecte en ce qui concerne les espaces de noms. "

Est-ce que quelqu'un a une idée de pourquoi cela pourrait être? Merci d'avance!

public class M 
{ 
public static void main(String[] args) 
{ 
    try 
    { 
      DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
      DocumentBuilder builder = factory.newDocumentBuilder(); 

      String text = new String("<blub></blub>"); 
      Document document = builder.parse(new InputSource(new StringReader(text))); 

      document.getDocumentElement().cloneNode(true); 
    } 
    catch(DOMException e) 
    {} 
    catch(ParserConfigurationException e) 
    {} 
    catch(IOException e) 
    {} 
    catch(SAXException e) 
    {} 
} 
} 
+0

Je remarque que vous ignorez 4 types différents d'exceptions. Si vous jetez DOMException, je me demande comment vous savez que c'est l'exception que vous obtenez, ou dans quelle ligne. Dans une application de test comme celle-ci, vous souhaiterez peut-être lancer des exceptions de main au lieu d'écrire des gestionnaires vides: 'public void principal (String [] argv) throws Exception {}'. Vous pouvez ensuite voir les traces de la pile lorsque vous exécutez votre code. Il n'est pas clair à partir de votre description quelle instruction jette votre DOMException. – iter

+0

Vous pouvez essayer de jouer avec factory.setNamespaceAware() – iter

+0

Merci J'ai déjà vérifié, mais malheureusement, factory.setNamespaceAware() n'a aucune influence. Je me demande si quelqu'un d'autre peut reproduire le problème? Btw: Je sais quelle exception je reçois parce que j'utilise des points d'arrêt d'exception dans eclipse ou juste une seule étape dans le code. Si je "ignorer" l'exception, comment pourrais-je connaître l'état de la propriété de code à l'intérieur de l'objet d'exception e? Et quelle ligne jette l'exception est écrit dans la première ligne de ma question: "La méthode cloneNode() throws [...]" – beutelfuchs

Répondre

0

Apparemment, cela est un bug connu avec les deux cloneNode et importNode: https://stackoverflow.com/a/8438416/671393

La "solution" est d'utiliser à la place adoptNode, mais évidemment cela va modifier la source DOM.

Ce bug est corrigé dans les versions ultérieures: http://code.google.com/p/android/issues/detail?id=2735#c4

Si le bug est en effet due à des nœuds ne pas être conscient espace de noms (comme suggéré dans le rapport de bogue), l'ajout d'un espace de noms factice peut-être une autre solution.