Когда я пытаюсь вызвать реализацию из другого модуля через интерфейс, я получаю исключение нулевого указателя
Мне нужна помощь! Я получаю появляется сообщение об исключительной ситуации, после развертывания.
У меня есть интерфейс AirlineClient в модуле 'com.airline.model.hook'.
Класс реализации-AirlineClientImpl в 'com.airline.client'
Я хочу, чтобы впрыснуть AirlineClient от класса авиакомпания на ком.авиакомпании.веб-модуль.
И com.airline.client, и com.airline.web имеет зависимость от com.airline.model. Но они не зависят друг от друга.
AirlineClient и AirlineClientImp нормальные классы Java (не планируется,КДИ..) и авиакомпанией является WebServlet.
Но когда я развертывание проекта на сервере GlassFish я всегда получаю появляется сообщение об исключительной ситуации :(
public class AirlineClientImpl implements AirlineClient { private ResteasyWebTarget webTarget; private ResteasyClient client; public AirlineClientImpl() { client = new ResteasyClientBuilder().build(); } public AirlineInformation getAirline(City city) throws IOException { .... } }
public interface AirlineClient { public AirlineInformation getAirline(City city) throws IOException; }
@WebServlet("/Airline") public class Airline extends HttpServlet { private static final long serialVersionUID = 1L; @Inject AirlineClient client; public Airline() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { .... AirlineInformation airline = client.getAirline(city); .... } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } }
Большое вам спасибо за всю эту помощь.
Что я уже пробовал:
Я попытался развернуть проект в glassfish и открыть веб-сайт, который вызывает сервлет авиакомпании, а затем получаю исключение null pointer
Richard MacCutchan
Вам нужно использовать свой отладчик, чтобы найти, где происходит исключение, и какая переменная является нулевой, когда она должна быть ссылкой на объект.
Member 13884093
Привет, Ричард, на самом деле исключение составляет выбрасывание client.getAirline(city) в сервлет авиакомпании, потому что реализация ссылки клиента еще не инициализирована, но я понятия не имею, как это сделать...
Richard MacCutchan
Вы должны создать клиентский объект из своего класса. Вы не можете объявить переменную и попытаться использовать ее без предварительной инициализации.
Member 13884093
Мне просто нужно получить доступ к реализации без добавления зависимости maven.
Member 13884093
Но реализация находится в другом модуле, к которому у меня нет никакого доступа. Поэтому я не могу создать экземпляр интерфейса, выполнив Interface aa = new Interface(); и это не рабочий интерфейс aa = new Implementation(); потому что реализация там недоступна.
Richard MacCutchan
В этом нет никакого смысла. Как вы можете использовать интерфейс или класс, к которому у вас нет доступа?
Member 13884093
Я помещаю интерфейс в общий модуль, а реализация-это еще один модуль. Я думаю, что у меня есть проблемы с дизайном. На самом деле я хочу добиться вот чего: у меня есть клиентский класс rest, который я хочу показать результат в интернете. Поэтому я создал 3 модуля, один из них для интернета, второй-клиент, а третья часть-клиент. Может быть, мне также следует поставить зависимость между вебом и клиентом? Или мне следует создать еще один модуль, например web-client-dependency?