0

Я новичок в Java EE и т.д., поэтому заранее прощу прощения если вопрос дурацкий, но я уже третий день не могу понять, что не так. В общем не могу понять по какой причине возникает исключение - java.lang.NullPointerException.

Я пишу небольшую программу, которая немного автоматизирует процесс. Сама идея:

Есть инстанс Jira Service desk v. 7.3.3, как известно у неё есть встроенный Tomcat, на котором она работает, так вот я хочу, чтобы мой Servlet, помещённый в папку /opt/atlassian/jira/webapps умел считывать данные из файлов - xls, xlsx, которые JIRA хранит как вложения в директории /var/atlassian/application-data/jira/data/attachments/project-key/issue-key и далее работать с этими данными.

Сами исходники можно клонировать отсюда - git clone https://GusMen@bitbucket.org/GusMen/xls.git

Чтобы иметь возможность читать xls файлы я использую в Java библиотеку Apache POI.

На локалке servlet работает просто отлично.

Например файл сохранён в директории E:\test.xls из Inteliij idea запустил Tomcat localhost

Данные считываются и печатаются, но на удалённом же сервере выпадает исключение

Remote Tomcat

В чём ошибка понять никак не могу, пробовал разное.

  1. Думал, что проблема в доступе к файлу, но например к txt файлам я могу достучаться и прочитать их.
  2. Подумал, что проблема в правах, сделал права chmod 777, не помогло

В общем буду рад любой помощи. Заранее Спасибо!

Servlet

package com.example.read_excel_file;

import javax.servlet.; import javax.servlet.http.; import javax.servlet.annotation.*; import java.io.IOException; import java.io.PrintWriter; import java.util.HashMap; import java.util.Map; import com.example.read_excel_file.classes.readTheAttachment;

@WebServlet(name = "MainServlet", value = "/autoRs25") public class MainServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); response.setCharacterEncoding("UTF-8"); String fileName, list; PrintWriter writer = response.getWriter(); fileName = request.getParameter("fileName"); list = request.getParameter("list");

    readTheAttachment readTheAttachment = new readTheAttachment();
    Map<String, String> rs25 = new HashMap<String, String>();
    rs25 = readTheAttachment.fileReader(fileName, list);
    writer.println("<code>");
    writer.println(rs25);
    writer.println("</code>");
    writer.close();
}

}

Вспомогательный класс

package com.example.read_excel_file.classes;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;

import java.io.FileInputStream; import java.io.IOException; import java.util.HashMap; import java.util.Iterator; import java.util.Map;

public class readTheAttachment { public Map<String, String> fileReader(String fileName, String list) { Map<String, String> rs25 = new HashMap<String, String>(); String filial = null; String userName = null; FileInputStream fileInputStream = null; HSSFWorkbook workbook = null;

    try {
        fileInputStream = new FileInputStream(fileName);
        workbook = new HSSFWorkbook(fileInputStream);
    } catch (IOException exception) {
        System.out.println(exception);
    }
    Sheet sheet = workbook.getSheet(list);
    Iterator&lt;Row&gt; it = sheet.iterator();

    while (it.hasNext()) {
        Row row = it.next();
        Iterator&lt;Cell&gt; cells = row.iterator();
        while (cells.hasNext()) {
            Cell cell = cells.next();
            int cellType = cell.getCellType();
            switch (cellType) {
                case Cell.CELL_TYPE_STRING:
                    if (filial != null) {
                        userName = cell.getStringCellValue();
                    } else {
                        filial = cell.getStringCellValue();
                    }
                    break;
                default:
                    System.out.println(&quot;error&quot;);
                    break;
            }
        }
        rs25.put(filial, userName);
        filial = null;
        userName = null;
    }
    return rs25;
}

}

GusMen
  • 1
  • 1
    есть же стэктрейс, посмотрите и попробуйте понять где выскакивает NPE , не получается, приведите кусок кода, опытный человек мельком взглянув сможет вам подсказать, а лезть в исходники , я думаю вряд ли кто будет этим заниматься. – стасевич Nov 11 '21 at 10:00
  • Вместо затянутого вступления и общего описания проекта имело смысл представить конкретный фрагмент кода. См. Как задать хороший вопрос – Nowhere Man Nov 11 '21 at 10:31
  • @AlexRudenko код в описании. – GusMen Nov 11 '21 at 10:51
  • @стасевич спасибо за подсказку, к сожалению я в Java новичок, с этим ещё не встречался. Почитаю – GusMen Nov 11 '21 at 10:53
  • если вы новичок в java, то зачем браться за ЕЕ? осваивайте SE , и уже потом беритесь за enterprise – стасевич Nov 11 '21 at 11:02
  • @стасевич Появилась необходимость хотя бы вникнуть в enterprise, поскольку дали задание на работе – GusMen Nov 11 '21 at 11:08
  • 1
    Здесь скорей всего причина в том, что было перехвачено и распечатано исключение при попытке доступа к файлу, после чего workbook остался null и при последующем обращении Sheet sheet = workbook.getSheet(list); вылетело NPE. Надо проверять логи сервера на предмет вывода IOException в строке System.out.println(exception);, а ещё лучше пробросить это исключение дальше, например обернув его в RuntimeException – Nowhere Man Nov 11 '21 at 11:14
  • В целом сама идея доступа к файловой системе на стороне веб-сервера, да ещё и с chmod 777 "абы работало" выглядит небезопасной. – Nowhere Man Nov 11 '21 at 11:20

0 Answers0