java.lang.IllegalCastException для GWT - PullRequest
0 голосов
/ 14 июля 2009

Я получаю исключение IllegalCastException в следующих случаях (см. Жирную строку):

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: "));
      }
}

Кто-нибудь знает, почему это так? Я посмотрел на примеры, и кажется, что это должно быть, как это сделать. Я использую следующие связанные импорты:

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

Здесь нужно отметить одну вещь ... Элемент импортируется как "import com.google.gwt.dom.client.Element;", я не могу импортировать "import com.google.gwt.xml.client.XMLParser; " как это даст мне ошибку:

"Импорт com.google.gwt.xml.client.Element сталкивается с другим оператором импорта"

Есть предложения? Спасибо!

Ответы [ 2 ]

2 голосов
/ 14 июля 2009

Метод com.google.gwt.xml.client.NodeList.item возвращает com.google.gwt.xml.client.Node, а не com.google.gwt.xml.client.Element. Такой Node может быть Element, но нет никакой гарантии. Вы должны проверить тип item, который возвращается до его приведения.

Кроме того, вы должны использовать соответствующий Element; Вы не можете заменить одно другим. Вы должны либо избегать импорта другого Element, либо полностью указать Element, который вам нужен здесь.

Например, если в вашем коде вас волнует только Element, и вы не исключаете другой импорт, тогда вы можете изменить свой цикл следующим образом:

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: "));
}
1 голос
/ 14 июля 2009

Вы пытались импортировать напрямую в исходный код вместо объявления в строках импорта?

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: "));
          }
}

Надеюсь, это поможет.

Tiger

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...