0

I am trying to parse XML file and save it into hashmap object. Smartphoneservlet is a class where I am retrieving the hashmap.

public class Product {

private String productid;
private String productname;
private String image;
private String type;
private String manufacturer;
private String price;
private String discount;
private String sale;
private String rebate;


public Product (String productid, String productname, String image, String type, String manufacturer, String price, String discount, String sale, String rebate) {
    this.productid = productid;
    this.productname = productname;
    this.image = image;
    this.type = type;
    this.manufacturer = manufacturer;
    this.price = price;
    this.discount = discount;
    this.sale = sale;
    this.rebate = rebate;
}

protected void setproductname(String productname) {
    this.productname = productname;
}

public String getproductname() {
    return productname;
}

protected void setproductid(String productid) {
    this.productid = productid;
}

public String getproductid() {
    return productid;
}

protected void setimage(String image) {
    this.image = image;
}

public String getimage() {
    return image;
}

protected void settype(String type) {
    this.type = type;
}

public String gettype() {
    return type;
}

protected void setmanufacturer(String manufacturer) {
    this.manufacturer = productid;
}

public String getmanufacturer() {
    return manufacturer;
}

protected void setprice(String price) {
    this.price = price;
}

public String getprice() {
    return price;
}

protected void setdiscount(String discount) {
    this.discount = discount;
}

public String getdiscount() {
    return discount;
}

protected void setsale(String sale) {
    this.sale = sale;
}

public String getsale() {
    return sale;
}

protected void setrebate(String rebate) {
    this.rebate = rebate;
}

public String getrebate() {
    return rebate;
}
}

XML file:

<smartphonecatalog>
<smartphones id="001">
    <image>iphone6.jpeg</image>
    <manufacturer>Apple</manufacturer>
    <name>iPhone6</name> 
    <type>phones</type>
    <price>599</price>
    <discount>Yes</discount>
    <rebate>Yes</rebate>
    <sale>Yes</sale>
</smartphones>

SaxXMLParser.java

  public class SaxXmlParser{



  // private SmartPhones phones;
   private String temp;


   public static HashMap<String, ArrayList<Product>> phoneList=new HashMap<String, ArrayList<Product>>();
   public static ArrayList<Product> phones = new ArrayList<Product>();
   public static Product products;

   /** The main method sets things up for parsing */
   public static void main(String[] args) { }

    public static HashMap<String, ArrayList<Product>> parserMethod(){

            String name;
          System.out.println("main method");
          //Create a "parser factory" for creating SAX parsers
          SAXParserFactory spfac = SAXParserFactory.newInstance();

          //Now use the parser factory to create a SAXParser object
          SAXParser sp = null;
          try{
              sp = spfac.newSAXParser();
          } catch (ParserConfigurationException e1){
              e1.printStackTrace();
          } catch (SAXException e1){
              e1.printStackTrace();
          }


          DefaultHandler handler = new DefaultHandler(){

              boolean bid = false;
              boolean bimage = false;
              boolean bmanufacturer = false;
              boolean bname = false;
              boolean bcondition = false;
              boolean bprice = false;
              boolean bdiscount = false;
              boolean brebate = false;
              boolean bsale = false;


                public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {


                    if (qName.equalsIgnoreCase("id")) {
                        //phones=new List<Product>();
                        //phones.setproductid(attributes.getValue("id"));
                        phoneList.put(attributes.getValue("id"),phones);

                        bid = true;
                    }
                    if (qName.equalsIgnoreCase("image")) {
                        bimage = true;
                    }
                    if (qName.equalsIgnoreCase("manufacturer")) {
                        bmanufacturer = true;
                    }
                    if (qName.equalsIgnoreCase("name")) {
                        bname = true;
                    }
                    if (qName.equalsIgnoreCase("condition")) {
                        bcondition = true;
                    }
                    if (qName.equalsIgnoreCase("price")) {
                        bprice = true;
                    }
                    if (qName.equalsIgnoreCase("discount")) {
                        bdiscount = true;
                    }
                    if (qName.equalsIgnoreCase("rebate")) {
                        brebate = true;
                    }
                    if (qName.equalsIgnoreCase("sale")) {
                        bsale = true;
                    }

                }

                public void endElement(String uri, String localName, String qName) throws SAXException {

                    phones.add(products);
                }

                public void characters(char ch[], int start, int length)  throws SAXException {
                    if(bid){

                        System.out.println("id: "+new String(ch,start,length));
                        products.setproductid(new String(ch,start,length));
                        //phones.add(new String(ch,start,length));
                        //phones.setproductid(new String(ch,start,length));
                        // phoneList.put(new String(ch,start,length),phones);
                        bid = false;
                    }
                    if(bimage){
                        System.out.println("image: "+new String(ch,start,length));
                        products.setimage(new String(ch,start,length));
                        //phones.add(new String(ch,start,length));
                        bimage = false;
                    }
                    if(bname){
                        System.out.println("name: "+new String(ch,start,length));
                        products.setproductname(new String(ch,start,length));
                        //phones.add(new String(ch,start,length));
                        bname = false;
                    }
                    if(bmanufacturer){
                        System.out.println("Manufacturer: "+new String(ch,start,length));
                        products.setmanufacturer(new String(ch,start,length));
                        //phones.add(new String(ch,start,length));
                        bmanufacturer = false;
                    }
                    if(bcondition){
                        System.out.println("condition: "+new String(ch,start,length));
                        products.settype(new String(ch,start,length));
                       // phones.add(new String(ch,start,length));
                        bcondition = false;
                    }
                    if(bprice){
                        System.out.println("price: "+new String(ch,start,length));
                        products.setprice(new String(ch,start,length));
                       // phones.add(new String(ch,start,length));
                        bprice = false;
                    }
                    if(bdiscount){
                        System.out.println("discount: "+new String(ch,start,length));
                        products.setdiscount(new String(ch,start,length));
                       // phones.add(new String(ch,start,length));
                        bdiscount = false;
                    }
                    if(brebate){
                        System.out.println("rebate: "+new String(ch,start,length));
                        products.setrebate(new String(ch,start,length));
                       // phones.add(new String(ch,start,length));
                        brebate = false;
                    }
                    if(bsale){
                        System.out.println("sale: "+new String(ch,start,length));
                        products.setsale(new String(ch,start,length));
                       // phones.add(new String(ch,start,length));
                        bsale = false;
                    }

                }

          };


          //Finally, tell the parser to parse the input and notify the handler
          try{
              sp.parse("C:/apache-tomcat-7.0.34-windows-x64/apache-tomcat-7.0.34/webapps/hw5/WEB-INF/classes/ProductCatalog.xml", handler);
          } catch (SAXException e) {
              e.printStackTrace();
          } catch (IOException e) {
              e.printStackTrace();
          }




         return phoneList;

   }}

Complete error:

java.lang.NullPointerException
SaxXmlParser$1.characters(SaxXmlParser.java:142)
com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.characters(AbstractSAXParser.java:546)
com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:463)
com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:848)
com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:777)
com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1213)
com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:648)
com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl.parse(SAXParserImpl.java:332)
javax.xml.parsers.SAXParser.parse(SAXParser.java:274)
SaxXmlParser.parserMethod(SaxXmlParser.java:196)
SmartPhoneServlet.doGet(SmartPhoneServlet.java:35)
javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)

I am not able to figure out the root of the problem.

trin
  • 75
  • 1
  • 8

0 Answers0