Right, but if you look at the code I sent, in this case I'm not passing
in beans.xml as an init-param to CXF but instead I'm passing it to
Spring's MessageDispatcherServlet.  I'm letting Spring create the beans
that CXF needs, but it seems like CXF is not getting them.

Is there a way to make CXF "aware" of the beans in the application
context created by Spring-WS?  

Nate

-----Original Message-----
From: Sergey Beryozkin [mailto:[email protected]] 
Sent: Wednesday, June 09, 2010 5:17 PM
To: [email protected]
Subject: Re: CXF JAX-RS with Spring-WS

Hi

I think one of the users had a similar problems recently. When
CXFServlet
links to beans.xml using its init-param, then this beans.xml should have
no
import statements, comment them out

hope it helps, Sergey

On Wed, Jun 9, 2010 at 10:03 PM, Reed, Nate <[email protected]> wrote:

> Hi,
>
>
>
> I'm having problems getting CXF-JAXRS to work with Spring-WS in my
> project.   I was able to get a very simple "HelloResource" example
> working.  In this example, I passed in beans.xml to CXF as an
> init-param, but this is not a solution because in my real project I
have
> some beans that are shared with Spring-WS.  When I tried to get CXF to
> load both in its init-param, requests for the Hello resource failed
with
> an error similar to below.
>
>
>
> So, as an alternative approach, I am trying to get Spring
> MessageDispatcherServlet to load all the beans needed by CXF, but it
> still doesn't work.
>
>
>
> I wonder what I'm missing?  When I make a request for my service, I
see
> the following log message:
>
>
>
> WARNING: Can't find the request for
>
http://localhost:8080/HooversAPI-trunk/rest/company/1's<http://localhost
:8080/HooversAPI-trunk/rest/company/1%27s>Observer
>
>
>
> I have defined a root resource as follows:
>
>
>
> @Path("/company")
>
> public class CompanyResource
>
>                                extends
>
>
> BaseEndPoint<GetCompanyDetailRequestDocument,
> GetCompanyDetailResponseDocument> {
>
>
>
>                public CompanyResource() {
>
>                                super(logger);
>
>                }
>
>
>
>                private static final Logger logger = LoggerFactory
>
>
> .getLogger(CompanyResource.class);
>
>
>
>                @Context
>
>                protected org.apache.cxf.jaxrs.ext.MessageContext mc;
>
>
>
>                @GET
>
>                @Path("{id}")
>
>                @Produces("text/html")
>
>                public GetCompanyDetailResponse echo(@PathParam("id")
> long id) {
>
>                ....
>
>                }
>
>
>
> In web.xml, I have configured Spring MessageDispatcherServlet to load
> the application context from beans.xml, which defines my JAX-RS server
> and imports all the beans it needs from spring-ws-servlet.xml:
>
>
>
>      <servlet>
>
>            <servlet-name>CXFServlet</servlet-name>
>
>            <servlet-class>
>
>                  org.apache.cxf.transport.servlet.CXFServlet
>
>            </servlet-class>
>
>            <load-on-startup>2</load-on-startup>
>
>      </servlet>
>
>
>
>      <servlet-mapping>
>
>            <servlet-name>CXFServlet</servlet-name>
>
>            <url-pattern>/rest/*</url-pattern>
>
>      </servlet-mapping>
>
>
>
>      <servlet>
>
>            <servlet-name>spring-ws</servlet-name>
>
>            <servlet-class>
>
>
>
org.springframework.ws.transport.http.MessageDispatcherServlet</servlet-
> class>
>
>            <init-param>
>
>                  <param-name>contextConfigLocation</param-name>
>
>                  <param-value>/WEB-INF/beans.xml</param-value>
>
>            </init-param>
>
>            <load-on-startup>1</load-on-startup>
>
>      </servlet>
>
>
>
>      <servlet-mapping>
>
>            <servlet-name>spring-ws</servlet-name>
>
>            <url-pattern>/*</url-pattern>
>
>      </servlet-mapping>
>
>
>
> In beans.xml:
>
>
>
>
>
>      <import resource="classpath:META-INF/cxf/cxf.xml"/>
>
>      <import
> resource="classpath:META-INF/cxf/cxf-extension-jaxrs-binding.xml" />
>
>      <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
>
>      <import resource="spring-ws-servlet.xml" />
>
>
>
>      <bean id="helloResourceBean"
> class="com.dnb.applications.webservice.resource.HelloResource"/>
>
>      <bean id="companyResourceBean"
> class="com.dnb.applications.webservice.resource.CompanyResource">
>
>            <property name="handler" ref="companyHandler" />
>
>      </bean>
>
>
>
>      <bean id="xmlBeansProvider"
> class="org.apache.cxf.jaxrs.provider.XMLBeansJSONProvider" />
>
>
>
>      <bean id="xmlBeansDataBinding"
> class="org.apache.cxf.xmlbeans.XmlBeansDataBinding">
>
>            <property name="namespaceMap" ref="jsonNamespaceMap"/>
>
>      </bean>
>
>
>
>      <util:map id="jsonNamespaceMap" map-class="java.util.Hashtable">
>
>            <entry key="http://applications.dnb.com/webservice/schema";
> value="ns10"/>
>
>            <entry key="http://www.w3.org/2001/XMLSchema-instance";
> value="xsi"/>
>
>      </util:map>
>
>
>
>      <jaxrs:server id="HooversRestAPI" address="/rest"
> staticSubresourceResolution="true">
>
>            <jaxrs:serviceBeans>
>
>                  <ref bean="companyResourceBean" />
>
>                  <ref bean="helloResourceBean" />
>
>            </jaxrs:serviceBeans>
>
>            <jaxrs:providers>
>
>                  <ref bean="xmlBeansProvider"/>
>
>            </jaxrs:providers>
>
>            <jaxrs:dataBinding>
>
>                  <ref bean="xmlBeansDataBinding" />
>
>            </jaxrs:dataBinding>
>
>      </jaxrs:server>
>
>
>
> Any ideas?  I also tried address="/" but get the same result.
>
>
>
> Thanks,
>
> Nate
>
>
>
>

Reply via email to