What seems to be missing is a contextloaderlistener that boots up your
spring context.
<web-app>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/searchService.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
...
</web-app>
Best regards
Christian
Am 31.01.2011 22:45, schrieb Loïc ¨Paillotin:
Hello,
I am fairly new to CXF and Spring, and have been tasked to port an existing
XFire Soap service to CXF.
Right now, my service seems to be correctly configured: I can access the
WSDL which seems correct (minor differences but I'll worry about that
later).
The problem I have is that some beans that were injected by spring in my
service under XFire are not injected in my CXF implementation.
My implementation class looks something like this:
@WebService(endpointInterface = "demo.cxf.ServiceCxf")
public class ServiceCxfImpl implements ServiceCxf {
private SearchService search;
private SearchSpec spec;
/**
* @inheritDoc
*/
public SearchResult[] searchSimple(SearchSpec spec) {
return search.searchSimple(spec);
}
The problem is that my SearchService bean is never instantiated.
My config:
searchService.xml
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jaxws="http://cxf.apache.org/jaxws"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">
<import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
<bean id="aegisBean"
class="org.apache.cxf.aegis.databinding.AegisDatabinding"
scope="prototype"/>
<bean id="jaxws-and-aegis-service-factory"
class="org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean"
scope="prototype">
<property name="dataBinding" ref="aegisBean"/>
<property name="serviceConfigurations">
<list>
<bean
class="org.apache.cxf.jaxws.support.JaxWsServiceConfiguration"/>
<bean
class="org.apache.cxf.aegis.databinding.XFireCompatibilityServiceConfiguration"/>
<bean
class="org.apache.cxf.service.factory.DefaultServiceConfiguration"/>
</list>
</property>
</bean>
<bean id="searchService"
class="demo.cxf.SearchService"/>
<jaxws:endpoint id="ServiceCxf"
implementor=demo.cxf.ServiceCxfImpl"
address="/searchServiceCxf">
<jaxws:serviceFactory>
<ref bean='jaxws-and-aegis-service-factory'/>
<ref bean='searchService'/>
</jaxws:serviceFactory>
</jaxws:endpoint>
</beans>
In web.xml, my servlet is simply configured like so:
<servlet>
<servlet-name>CXFServlet</servlet-name>
<display-name>CXF Servlet</display-name>
<servlet-class>
org.apache.cxf.transport.servlet.CXFServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/cxf/*</url-pattern>
</servlet-mapping>
I have no idea why I can't inject the bean using spring. I tried lots of
different things that probably make no sense, and I am a bit lost to be
honest.
Could somebody point me in the right direction?
Thanks a lot in advance for your help.
--
Loïc Paillotin
--
----
http://www.liquid-reality.de