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 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