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.