SAX Parser выпуск NullPointer - PullRequest
       10

SAX Parser выпуск NullPointer

0 голосов
/ 01 ноября 2011

Все, следующий код генерирует исключение NullPointerException.

        SAXParserFactory spf = SAXParserFactory.newInstance(); 
        SAXParser sp = spf.newSAXParser(); 

        XMLReader xr = sp.getXMLReader(); 

        dataHandler dataHandler = new dataHandler(); 
        xr.setContentHandler(dataHandler); 

xmldata="<ArrayOfNacionalClass xmlns="http://schemas.datacontract.org/2004/07/ServiceCompras" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><NacionalClass><ProdutoName>Batata Congelada Pré Frita Perdigão 400g</ProdutoName><ProdutoPreco>2,50</ProdutoPreco></NacionalClass><NacionalClass><ProdutoName>Iogurte Polpa Morango Batavo 540g</ProdutoName><ProdutoPreco>2,20</ProdutoPreco></NacionalClass><NacionalClass><ProdutoName>Protetor Solar Loção FPS 15 Sundown 120ml</ProdutoName><ProdutoPreco>16,83</ProdutoPreco></NacionalClass><NacionalClass><ProdutoName>Costela Bovina Resfriada por kg com Peso Aprox. 1,250 Kg</ProdutoName><ProdutoPreco>10,87</ProdutoPreco></NacionalClass><NacionalClass><ProdutoName>Refrigerante Pepsi 2 Litros</ProdutoName><ProdutoPreco>2,99</ProdutoPreco></NacionalClass><NacionalClass><ProdutoName>Pizza Mussarela Ristorante 340g</ProdutoName><ProdutoPreco>5,98</ProdutoPreco></NacionalClass><NacionalClass><ProdutoName>Néctar de Uva Del Valle Mais 1,5L</ProdutoName><ProdutoPreco>4,99</ProdutoPreco></NacionalClass><NacionalClass><ProdutoName>Batata Original Ruffles 400g</ProdutoName><ProdutoPreco>11,70</ProdutoPreco></NacionalClass><NacionalClass><ProdutoName>Bolo de Chocolate Granulado por kg com Peso Aprox. 0,500 Kg</ProdutoName><ProdutoPreco>14,00</ProdutoPreco></NacionalClass><NacionalClass><ProdutoName>Sorvete Especial Diamante Negro Kibon 2L</ProdutoName><ProdutoPreco>15,38</ProdutoPreco></NacionalClass><NacionalClass><ProdutoName>Bebida Láctea Nescau Fast Nestlé 300ml</ProdutoName><ProdutoPreco>2,38</ProdutoPreco></NacionalClass><NacionalClass><ProdutoName>Cerveja Pilsen Nova Schin 473ml</ProdutoName><ProdutoPreco>1,69</ProdutoPreco></NacionalClass><NacionalClass><ProdutoName>Lava Roupas Líquido Concentrado Omo Multiação 315ml</ProdutoName><ProdutoPreco>5,20</ProdutoPreco></NacionalClass><NacionalClass><ProdutoName>Kit Shampoo e Condicionador Controle de Queda 400ml Pantene Pro-V</ProdutoName><ProdutoPreco>17,00</ProdutoPreco></NacionalClass><NacionalClass><ProdutoName>Amaciante Comfort Original 500ml</ProdutoName><ProdutoPreco>5,00</ProdutoPreco></NacionalClass></ArrayOfNacionalClass>"

InputSource is=new InputSource(new ByteArrayInputStream(xmldata.getBytes()));



try {
      xr.parse(is);
  }catch (Exception e)
  {
     e.printStackTrace();
   }

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

Пожалуйста, помогите .. спасибо

1 Ответ

0 голосов
/ 01 ноября 2011

Когда я использовал SAXParser, я обнаружил, что мне нужно добавить заголовок XML в мой файл, прежде чем он будет работать, и мне также нужно было заключить все мои данные в один тег верхнего уровня, например,

  private static final String XML_HEADER = "<?xml version=\"1.0\"?><z>";
  private static final String XML_FOOTER = "</z>"

  String xmldata = XML_HEADER + 
                   "<ArrayOfNacionalClass ... your data >" +
                   XML_FOOTER;
  sp.parse(new ByteArrayInputStream(xmldata.getBytes("UTF-8")), 
           this);

Возможно, вам не нужны части <z></z>, указанные выше, если все ваши данные всегда будут заключены в тег ArrayOfNacionalClass верхнего уровня.

<ArrayOfNacionalClass>your data</ArrayOfNacionalClass>

Если вы оставите мои <z></z> теги, вам нужно будет обработать их в вашем классе DefaultHandler.

Если ничего из этого не помогло, вот пример кода для SAXParser, который может оказаться полезным:
http://www.mkyong.com/java/how-to-read-xml-file-in-java-sax-parser/

Выложенный вами код не выглядит так, как будто он скомпилируется, если только это не ваш собственный класс dataHandler? Если это так, то вы должны опубликовать код для этого тоже.

Я рекомендую вам использовать IDE, которая поможет вам исправить ошибки компиляции при вводе (например, Eclipse).

...