Почему мой обработчик SAX возвращает объект без значений?Я устанавливаю это просто отлично - PullRequest
0 голосов
/ 28 ноября 2011

Я пишу SAX-парсер для xml, и возвращаемый объект не имеет значений, которые я устанавливаю в событиях.

Моя структура классов выглядит следующим образом:

public class ProductSAXHandler extends DefaultHandler {

  private Product product;

  public ProductSAXHandler() {
     product = new Product();
  }

  public Product ParseXmlFile(String xml) {

     SAXParserFactory spf = new ...
     XMLReader parser = ....


     parser.parse(xml);


     return product;
  }


  public void StartElement(....) {


    for(int ...) { // looping through attributes

      if(qName == "description" && name == "sku") {
        product.setSKU(value);
      }
    }

   }

}

Когда я нахожусь в режиме отладки, значение продукта действительно устанавливается, и я вижу, что поле sku продукта имеет правильное значение.

Но по какой-то причине объект product вернулсяэто просто новый объект Product без значений, установленных во время синтаксического анализа.

Что я здесь не так делаю?Должно быть, я не понимаю, как эти события запускаются и т. Д.

Обновление

Очень странно, если в моем операторе if в значении set правильно указано значение атрибута для SKUполе моего класса продукта, но когда я возвращаю объект продукта в ParseXMLFile, поле SKU имеет значение null.

Я полагаю, что обратные вызовы запускаются в разное время , как я должен вернутьправильно тогда ??

1 Ответ

5 голосов
/ 28 ноября 2011

Что бы вы ни думали, не сравнивайте строки с "==", используйте equals().

...