2009-07-13 9 views
0

Je reçois un IllegalCastException sur les points suivants (voir ligne en gras):java.lang.IllegalCastException pour GWT

public void renderXML(final String xml) { 
    final Document xmlDoc = XMLParser.parse(xml); 
    final com.google.gwt.xml.client.Element root = xmlDoc.getDocumentElement(); 
    XMLParser.removeWhitespace(xmlDoc); 

    final NodeList collection = root.getElementsByTagName("collection"); 
     for (int i = 0; i < collection.getLength(); i++) { 
     **final Element coll= (Element)collection.item(i);** 
     RootPanel.get("slot2").add(new Label("coll: ")); 
     } 
} 

Est-ce que quelqu'un sait pourquoi il en est ainsi? J'ai regardé des exemples, et il semble que ce soit censé être comment le faire. J'utilise les importations connexes suivantes:

import com.google.gwt.xml.client.Document; 
import com.google.gwt.xml.client.NodeList; 
import com.google.gwt.xml.client.XMLParser; 

Une chose à prendre note d'ici ... Element est importé comme « com.google.gwt.dom.client.Element d'importation; », je ne peux pas importer « importer com.google.gwt.xml.client.XMLParser; " car il me donne l'erreur:

« Le com.google.gwt.xml.client.Element d'importation entre en collision avec une autre déclaration d'importation »

Toutes les suggestions? Merci!

Répondre

2

Le procédé com.google.gwt.xml.client.NodeList.item renvoie un com.google.gwt.xml.client.Node, pas com.google.gwt.xml.client.Element. Un tel Node peut être un Element, mais il n'y a aucune garantie. Vous devez vérifier le type du item renvoyé avant de le lancer. En outre, vous devez utiliser le Element approprié; vous ne pouvez pas substituer l'un à l'autre. Vous devez soit éviter d'importer l'autre Element, soit spécifier complètement le Element dont vous avez besoin ici.

Par exemple, en supposant dans votre code que vous ne vous préoccupez Element, et vous ne suppriment pas l'autre importation, vous pouvez changer votre boucle pour être en tant que tel:

final NodeList collection = root.getElementsByTagName("collection"); 
for (int i = 0; i < collection.getLength(); i++) { 

    Node node = collection.item(i); 
    if (!(node instanceof com.google.gwt.xml.client.Element)) { 
     continue; 
    } 

    com.google.gwt.xml.client.Element coll = 
    (com.google.gwt.xml.client.Element)node; 
    RootPanel.get("slot2").add(new Label("coll: ")); 
} 
+0

Qui a fait les tours, merci! – littleK

1

Avez-vous essayé d'importer directement dans le code source au lieu de déclarer sur les lignes d'importation?

public void renderXML(final String xml) { 
     // just directly import it as local variable. 
     final Document xmlDoc = com.google.gwt.xml.client.XMLParser.XMLParser.parse(xml); 
     final com.google.gwt.xml.client.Element root = xmlDoc.getDocumentElement(); 
     XMLParser.removeWhitespace(xmlDoc); 

     final NodeList collection = root.getElementsByTagName("collection"); 
      for (int i = 0; i < collection.getLength(); i++) { 
      **final Element coll= (Element)collection.item(i);** 
      RootPanel.get("slot2").add(new Label("coll: ")); 
      } 
} 

J'espère que cela aide.

Tiger

+0

Tiger, qui a travaillé. Merci de votre aide! – littleK