NPE при использовании DI с Spring в проекте JAX-WS - PullRequest
0 голосов
/ 28 апреля 2011

Я работаю над проектом JAX-WS, и теперь я хотел бы добавить внедрение зависимости для одной из моих утилит.

У утилиты есть интерфейс;GeocodeUtil и две реализации, GeocodeUtilGoogleImpl и GeocodeUtilYahooImpl.Теперь в моем классе обслуживания у меня есть следующее:

public class MyService {
    private GeocodeUtil geocodeUtil;
    /* getter and setter for geocodeUtil */
}

В моем applicationContext.xml у меня есть следующее:

<bean id="geocodeUtil" class="com.company.GeocodeUtilGoogleImpl"/>
<bean id="myService" class="com.company.MyService">
    <property name="geocodeUtil" ref="geocodeUtil" />
</bean>

Вот мой web.xml (только часть, связаннаяSpring):

<!-- Spring context -->
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
</context-param>

<!-- Listeners -->
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

Когда я создаю экземпляр объекта MyService и пытаюсь использовать geocodeUtil, я получаю исключение NullPointerException, и мне кажется, что реализация не была внедрена.Что мне кажется странным, так это то, что как только я удаляю метод получения / установки, приложение запускается при запуске, и Spring жалуется на отсутствующий метод установки / получения, что заставляет меня думать, что XML-конфигурация на самом деле правильная.1013 * Я не использую пружинные Java-аннотации.

Любая помощь приветствуется.

Ответы [ 2 ]

2 голосов
/ 29 апреля 2011

Вы также должны получить экземпляр Service из контекста Spring.

Создание сервисного объекта с новым оператором не будет вызывать пружину для вставки объектов для этого экземпляра.

2 голосов
/ 29 апреля 2011

Хотя это не ясно из вашей публикации, я подозреваю, что вы не извлекаете экземпляр из контекста приложения.Если вы не используете какие-либо аннотации, тогда код, вызывающий ваш объект MyService, должен извлечь компонент из контекста приложения, выполнив что-то вроде этого:

ServletContext servletContext =this.getServletContext();

 WebApplicationContext wac = WebApplicationContextUtils.
getRequiredWebApplicationContext(servletContext);

 MyService user = (MyService)wac.getBean("myService");

Указанная вами правильная конфигурация пружины,Все, что вам нужно сделать, это убедиться, что контекст приложения создан, и что вы извлекаете свой объект из контекста приложения.Смотрите здесь для получения дополнительной информации:

http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/beans.html#beans-factory-client

...