Jerry
Jerry

Reputation: 145

Add multiple endpoint / service classes using apache cxf

I am trying to implement rest webservice using apache cxf (non-spring). I have configured my web.xml and added one end-point address, it works fine but now i want to add one more end-point address or one more service class and I am unable to do it because the second one overrides the first one. My web.xml like this

<servlet>
        <display-name>CXFNonSpringJaxrsServlet</display-name>
        <servlet-name>CXFNonSpringJaxrsServlet</servlet-name>
        <servlet-class>org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet</servlet-class>
        <init-param>
            <param-name>jaxrs.serviceClasses</param-name>
            <param-value>abc</param-value>
        </init-param>
            <init-param>
                <param-name>jaxrs.address</param-name>
                <param-value>/abc</param-value>
            </init-param>
         <load-on-startup>1</load-on-startup>
    </servlet>



        <servlet>
        <display-name>CXFNonSpringJaxrsServlet</display-name>
        <servlet-name>CXFNonSpringJaxrsServlet</servlet-name>
        <servlet-class>org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet</servlet-class>
        <init-param>
            <param-name>jaxrs.serviceClasses</param-name>
            <param-value>xyz</param-value>
        </init-param>
        <init-param>
            <param-name>jaxrs.address</param-name>
            <param-value>/xyz</param-value>
        </init-param>
         <load-on-startup>1</load-on-startup>
    </servlet>

Upvotes: 1

Views: 2177

Answers (1)

Garry
Garry

Reputation: 4533

You can do like this to have multiple endpoints:

web.xml

<servlet>
<servlet-name>s1</servlet-name>

<servlet-class>
    org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet
</servlet-class>
<init-param>
<param-name>jaxrs.serviceClasses</param-name>
<!-- Multiple resource classes separated with space -->
<param-value>
com.gsdev.Resource1 com.gsdev.Resource2
com.ttdev.bs.BookSelectionsResource
</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>s1</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>

Resource classes will be like:

@Path("endpoint1/")
public class Resource1

@Path("endpoint2/")
public class Resource2

Now you have different endpoints as

http://host:port/webapp/services/endpoint1/
http://host:port/webapp/services/endpoint2/

Upvotes: 3

Related Questions