Деплою это в сервер приложений, запускаю веб сервис http://localhost:8081/Owl/IncomingCallWSService?WSDL. Работает, посылает строки или pojo.
Теперь мне нужно получить данные, которые предоставляет бин hotLine( описан в applicationContext). Так вот, он — null. По идее, spring создает бин веб-сервиса и передает ему указанный бин( в методах разместил log.warn, которые мне сообщают о том что творится). Получается так: при старте web-приложения все бины создаются, все нормально, однако, при обращении к веб-сервису бин веб-сервиса создается снова, но hotLine ему не передается( отсюда он null). Такое ощущение, что веб-сервис работает вне контекста spring.
Re: JAX-WS и spring. Не получается связать вместе.
B>Деплою это в сервер приложений, запускаю веб сервис http://localhost:8081/Owl/IncomingCallWSService?WSDL. Работает, посылает строки или pojo. B>Теперь мне нужно получить данные, которые предоставляет бин hotLine( описан в applicationContext). Так вот, он — null. По идее, spring создает бин веб-сервиса и передает ему указанный бин( в методах разместил log.warn, которые мне сообщают о том что творится). Получается так: при старте web-приложения все бины создаются, все нормально, однако, при обращении к веб-сервису бин веб-сервиса создается снова, но hotLine ему не передается( отсюда он null). Такое ощущение, что веб-сервис работает вне контекста spring. B>
Я бы подключил к проекту исходники этой интеграции. Поставиль бряку в конструкторе IncomingCallWS. И посмотрел кто реально создает экзепмляр и как. Тогда будет видно почему так.
Re[2]: JAX-WS и spring. Не получается связать вместе.
От:
Аноним
Дата:
05.02.08 12:57
Оценка:
Здравствуйте, Blazkowicz, Вы писали:
B>Я бы подключил к проекту исходники этой интеграции. Поставиль бряку в конструкторе IncomingCallWS. И посмотрел кто реально создает экзепмляр и как. Тогда будет видно почему так.
Утянул исходники, jaxws-spring-1.8-sources.jar. Подключил к проекту( Netbeans 6: Свойства проекта->Libraries->Add jar/folder ).
Нашел в исходниках WSSpringServlet( т.к. он в web.xml указан), поставил бряк в конструкторе. Поставил бряк в конструкторе IncomingCallWS.
Что получилось.
1. В WSSpringServlet не зашел. Если я правильно все сделал.
2. При запуске приложения создается IncomingCallWS, ему передается бин HotLine.
3. При получении запроса от клиента:
а) если запрос получен первый раз, то создается новый экземпляр IncomingCallWS(HotLine не передается), срабатывает удаленный метод;
б) запрос повторный, у созданного в пункте а) бина дергается веб-метод.
Re[3]: JAX-WS и spring. Не получается связать вместе.
Здравствуйте, Аноним, Вы писали:
А> а) если запрос получен первый раз, то создается новый экземпляр IncomingCallWS(HotLine не передается)
Кем создается этот экземпляр? Посмотри по стэку, кто именно вызвал конструктор в этот раз.
Re[4]: JAX-WS и spring. Не получается связать вместе.
Здравствуйте, Blazkowicz, Вы писали:
B>Кем создается этот экземпляр? Посмотри по стэку, кто именно вызвал конструктор в этот раз.
Выкидываю экзепшн в конструкторе и сморю printStackTrace().
При загрузке веб-приложения
java.lang.NullPointerException
at ru.izhnet.common.ccenter.ws.IncomingCallWS.<init>(IncomingCallWS.java:50)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:85)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:61)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:756)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:721)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:384)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:270)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:261)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:109)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1099)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:861)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:421)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:215)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:127)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1099)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:861)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:421)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:251)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:156)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:248)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:287)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:352)
at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:244)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:187)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:49)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4515)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:5176)
at com.sun.enterprise.web.WebModule.start(WebModule.java:327)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:973)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:957)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:688)
at com.sun.enterprise.web.WebContainer.loadWebModule(WebContainer.java:1581)
....
При удаленном обращении
java.lang.NullPointerException
at ru.izhnet.common.ccenter.ws.IncomingCallWS.<init>(IncomingCallWS.java:50)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at java.lang.Class.newInstance0(Class.java:355)
at java.lang.Class.newInstance(Class.java:308)
at com.sun.xml.ws.api.server.InstanceResolver.createNewInstance(InstanceResolver.java:215)
at com.sun.enterprise.webservice.InstanceResolverImpl.<init>(InstanceResolverImpl.java:69)
at com.sun.enterprise.webservice.JAXWSServlet.registerEndpoint(JAXWSServlet.java:390)
at com.sun.enterprise.webservice.JAXWSServlet.doInit(JAXWSServlet.java:252)
at com.sun.enterprise.webservice.JAXWSServlet.init(JAXWSServlet.java:113)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1178)
at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:832)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:271)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:202)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:94)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:206)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:150)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:270)
at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.invokeAdapter(DefaultProcessorTask.java:637)
at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.doProcess(DefaultProcessorTask.java:568)
at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.process(DefaultProcessorTask.java:813)
at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.executeProcessorTask(DefaultReadTask.java:339)
at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:261)
at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:212)
at com.sun.enterprise.web.portunif.PortUnificationPipeline$PUTask.doTask(PortUnificationPipeline.java:361)
at com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:265)
at com.sun.enterprise.web.connector.grizzly.ssl.SSLWorkerThread.run(SSLWorkerThread.java:106)
Re[5]: JAX-WS и spring. Не получается связать вместе.
Здравствуйте, brejnev, Вы писали:
B>>Кем создается этот экземпляр? Посмотри по стэку, кто именно вызвал конструктор в этот раз.
B>Выкидываю экзепшн в конструкторе и сморю printStackTrace().
B>При удаленном обращении B>
B> at com.sun.enterprise.webservice.JAXWSServlet.registerEndpoint(JAXWSServlet.java:390)
B> at com.sun.enterprise.webservice.JAXWSServlet.doInit(JAXWSServlet.java:252)
B> at com.sun.enterprise.webservice.JAXWSServlet.init(JAXWSServlet.java:113)
B>
Вот собственно и разгадка. Почему здесь JAXWSServlet а не WSSpringServlet?
Re[6]: JAX-WS и spring. Не получается связать вместе.
B>>Вот собственно и разгадка. Почему здесь JAXWSServlet а не WSSpringServlet? B>Угу, хотя в web.xml и указан WSSpringServlet. Погуглил, без результатов. Сейчас домой, завтра дальше копать буду.
А что там гуглить, где-то что-то не добилдил, где-то что-то не додеплоил.
Re[8]: JAX-WS и spring. Не получается связать вместе.
Здравствуйте, Blazkowicz, Вы писали: B>А что там гуглить, где-то что-то не добилдил, где-то что-то не додеплоил.
Утро вечера мудренее
Вчера парился, ничего не получалось. Сегодня с утра все сделал, в сумме заняло меньше часа:
0) настроится на работу, налить чай
1) скачать spring 2.5 и прикрутить его к проекту заместо старого
2) пролистать мануал на тему что там нового.
Вот такой веб сервис
@WebService
@SOAPBinding(style = Style.RPC, use = Use.LITERAL, parameterStyle = ParameterStyle.WRAPPED)
public class IncomingCallWS extends SpringBeanAutowiringSupport {
@Autowired
private HotLine hotLine;
@WebMethod
public MyPojoObject receiveCall(...) {
...
}
public IncomingCallWS() {
}
public HotLine getHotLine() {
return hotLine;
}
public void setHotLine(HotLine hotLine_) {
this.hotLine = hotLine_;
}
}