Member 13884093 Ответов: 0

Когда я пытаюсь вызвать реализацию из другого модуля через интерфейс, я получаю исключение нулевого указателя


Мне нужна помощь! Я получаю появляется сообщение об исключительной ситуации, после развертывания.
У меня есть интерфейс 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?

0 Ответов