Вопрос по jax-ws, spring – Веб-сервис JAX WS не принимает Spring Bean из applicationcontext, поэтому выдает исключение нулевого указателя
Привет я получил веб-сервис и работает, я использовал jax ws. Я использовал Spring, чтобы иметь возможность использовать bean-компоненты с Autowired и другие вещи, которые Spring выдает как инъекцию значения свойства в applicationContext.xml.
У меня есть нижеприведенная весенняя запись applicationcontext.xml:
В классе конечной точки веб-сервиса я сделал:
@Autowired private MyBeanProperty myProperty;
И у меня есть метод:
public String getSize() {
return myProperty.getSize();
}
К сожалению, когда я вызываю метод, он не получает никакого значения и выбрасывает nullpointerexception.
PS: я использовал soapUI для запуска wsdl веб-сервиса и вызвал метод.
Работает ли веб-служба до того, как Spring создаст bean-компоненты?
Даффмо
Да, я использовал компонентное сканирование в applicationContext. И у меня есть слушатель загрузчика контекста, как показано ниже в web.xml. Пожалуйста, помогите мне..
Вот мое полное объяснение кода с кодом
Я использую JAX-WS и Spring и пытаюсь настроить несколько Web-сервисов, которые должны работать на Tomcat 7. Я использую Maven в качестве инструмента для сборки, поэтому я просто перечисляю здесь две свои зависимости:
org.springframework
spring-web
3.0.5.RELEASE
com.sun.xml.ws
jaxws-rt
2.1.3
мои классы обслуживания расположены в com.test.services и называются TestService & HelloWorldService и выглядит следующим образом:
package com.test.services;
import javax.jws.WebMethod;
import javax.jws.WebService;
@WebService( name = "Test", serviceName = "TestService" )
public class TestService {
@WebMethod
public String getTest() {
return "Test";
}
}
это мой web.xml:
toolbox
testing webservices
com.sun.xml.ws.transport.http.servlet.WSServletContextListener
jaxws-servlet
com.sun.xml.ws.transport.http.servlet.WSServlet
1
jaxws-servlet
/testservice
jaxws-servlet
/helloworldservice
10
а это мой sun-jaxws.xml:
Это прекрасно работает, и я могу получить доступ к сервисам, указав в своем браузере [url]HTTP: // локальный: 8080 / набор инструментов / TestService [/ URL] соответственно [url]HTTP: // локальный: 8080 / набор инструментов / helloworldservice [/ URL], Однако поддержка Spring явно не активирована.
Я попробовал следующее, которое только что оставило HelloWorldService доступным: web.xml:
toolbox
30
org.springframework.web.context.ContextLoaderListener
и applicationContext.xml:
кроме того, я аннотировал оба класса Service аннотацией @Service. Как я упоминал ранее, здесь публикуется только первый алфавитный веб-сервис, поэтому HelloWorldService. Также он меняет URL, так как сервис теперь доступен как [url]HTTP: // локальный: 8080 / [/ URL] а не [URL]HTTP: // локальный: 8080 / набор инструментов / helloworldservice [/ URL], Ведение журнала Tomcat показывает, что Spring Context загружает оба класса как бины Spring. Есть ли у вас какие-либо идеи или предложения о том, как включить поддержку Spring при сохранении доступности обеих служб?
Не нужно также использовать ApplicationContext, если вы делаете следующие вещи
- Аннотируйте свой класс обслуживания с @Service
- Класс обслуживания должен расширятьсяSpringBeanAutowiringSupport».
Пожалуйста, посмотрите на следующий фрагмент.
@org.springframework.stereotype.Service
@javax.jws.WebService (endpointInterface="a.b.c.MyPort",
targetNamespace="http://a.b.co.in/Retail/MyService/V1",
serviceName="MyService",
portName="MyServicePort",
wsdlLocation="wsdl/MyService.wsdl")
public class MyServiceBindingImpl extends org.springframework.web.context.support.SpringBeanAutowiringSupport{
Здесь ответили, В конечном счете, ничего не сработало, кроме добавления приведенного ниже кода в сервис.
@PostConstruct
public void init() {
SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
}
Я думаю это'Более вероятно, что ваш Spring-контекст не был загружен и сделан доступным для веб-службы. Как ты это сделал?
Вы должны иметьContextLoaderListener
настроен вweb.xml
для WAR, в которой развернут веб-сервис. Вы сказали ему, где загрузить контекст Spring? Вы используете компонентное сканирование?
http://renidev.wordpress.com/2009/02/02/how-to-use-springs-context-component-scan-and-annotation/
Ваш TestService (аннотированный @WebService) должен расширяться "SpringBeanAutowiringSupport» класс, чтобы пнуть начало весеннего связывания.
Пожалуйста, взгляните также на упомянутые пункты.