Hello,
my objective is to build a Restful Service, so i use "Jeresy" (javax.ws.rs) to make it, now i try to obtain data from excel file an put them in array list, then i will use those data (which stored in the array list) in the code of Jersy to display it in Json format, but i get always error as the flowing:
HTTP Status 500 - java.lang.NoClassDefFoundError: org/apache/poi/hssf/usermodel/HSSFWorkbook type Exception report message java.lang.NoClassDefFoundError: org/apache/poi/hssf/usermodel/HSSFWorkbook description The server encountered an internal error that prevented it from fulfilling this request. exception javax.servlet.ServletException: java.lang.NoClassDefFoundError: org/apache/poi/hssf/usermodel/HSSFWorkbook com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:420) com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:538) com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:716) javax.servlet.http.HttpServlet.service(HttpServlet.java:728) root cause java.lang.NoClassDefFoundError: org/apache/poi/hssf/usermodel/HSSFWorkbook JavaBeans.Reader.read(Reader.java:30) JavaBeans.ArrList.arrList(ArrList.java:18) com.crunchify.restjersey.RestfullJersy.convertFtoC(RestfullJersy.java:21) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) java.lang.reflect.Method.invoke(Unknown Source) com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60) com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$ResponseOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:205) com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75) com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:302) com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108) com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147) com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84) com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1480) com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1411) com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1360) com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1350) com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:416) com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:538) com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:716) javax.servlet.http.HttpServlet.service(HttpServlet.java:728) note The full stack trace of the root cause is available in the Apache Tomcat/7.0.41 logs. Apache Tomcat/7.0.41
The codes:
First code of Apache POI to read from excel file:
package JavaBeans; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.util.ArrayList; import java.util.Iterator; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.json.simple.JSONObject; public class Reader { protected static ArrayList col = new ArrayList(); public void read(){ try { FileInputStream file = new FileInputStream(new File("d:\\hi.xls")); //Get the workbook instance for XLS file HSSFWorkbook workbook = new HSSFWorkbook(file); //Get first sheet from the workbook HSSFSheet sheet = workbook.getSheetAt(0); //Iterate through each rows from first sheet Iterator<Row> rowIterator = sheet.iterator(); while(rowIterator.hasNext()) { Row row = rowIterator.next(); //display from the third row until 5th if(row.getRowNum()>2 && (row.getRowNum()<5)) { { //For each row, iterate through each columns Iterator<Cell> cellIterator = row.cellIterator(); while(cellIterator.hasNext()) { //Getting the cell contents Cell cell = cellIterator.next(); switch(cell.getCellType()) { case Cell.CELL_TYPE_BOOLEAN: System.out.print(cell.getBooleanCellValue() + "\t\t"); break; case Cell.CELL_TYPE_NUMERIC: System.out.print(cell.getNumericCellValue() + "\t\t"); break; case Cell.CELL_TYPE_STRING: System.out.print(cell.getStringCellValue() + "\t\t"); break; case Cell.CELL_TYPE_FORMULA: System.out.println(cell.getCellFormula()); break; /** case Cell.CELL_TYPE_BLANK: System.out.println("BLANK"); break; **/ } } } } //store the values of the third Column Cell cell = row.getCell(2); //if (cell.getColumnIndex() == 2) if(cell != null){ //add the values of the cell to the Arraylist if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) { col.add(cell.getNumericCellValue()); } else if (cell.getCellType() == Cell.CELL_TYPE_STRING) { col.add(cell.getRichStringCellValue().getString()); } else if (cell.getCellType() == Cell.CELL_TYPE_BOOLEAN) { col.add(cell.getBooleanCellValue()); } } System.out.println(""); } file.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
second the code of the Jeresy (Restful)
PS: ithe Jeresy code work very well if it tried to get the data from arraylist in independent class where no "Poi" to read excel filepackage com.crunchify.restjersey; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.Response; import org.json.JSONException; import org.json.JSONObject; import JavaBeans.Reader; @Path("/Exceltojersy") public class RestfullJersy extends Reader{ @GET @Produces("application/json") public Response convertFtoC() throws JSONException { Reader read = new Reader(); read.read(); JSONObject jsonObject = new JSONObject(); jsonObject.put("coloum 0", col.get(0)); jsonObject.put("coloum 1", col.get(1)); jsonObject.put("coloum 2", col.get(2)); jsonObject.put("coloum 3", col.get(3)); jsonObject.put("coloum 4", col.get(4)); //jsonObject.put("coloum 5", col1.get(5)); String result = "@Produces(\"application/json\") Output: \n\nArrayList Output: \n\n" + jsonObject; return Response.status(200).entity(result).build(); } }
for example:
heir if i injected this arraylist in the jeresy code it will works, but i need to get the data from Excel filepackage JavaBeans; import java.util.ArrayList; public class ArrList1 { protected static ArrayList col1 = new ArrayList(); public void arrList() { col1.add(1); col1.add(2); col1.add(3); col1.add(4); col1.add(5); col1.add(6); //print the value of the cells which is stored in the the Arraylist System.out.println(""); for (int i = 0; i < col1.size(); i++){ Object item = col1.get(i); System.out.println("New Coloum " + i + " : " + item); } } }
So any idea??