cxf-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Jan Cetkovsky (JIRA)" <>
Subject [jira] [Commented] (CXF-5702) CXF 3.0 ApplicationPath issue with JAX-RS
Date Mon, 14 Mar 2016 22:32:33 GMT


Jan Cetkovsky commented on CXF-5702:

[~sergey_beryozkin] which servlet parameter (you mean <init-param>, what would be the
key)? The issue I'm seeing in the 2.7 is if using:



public class MyApplication extends Application {

than the application gets bind to {applicationContext}/first/second

while according the spec it should get overriden and be {applicationContext}/first only

> CXF 3.0 ApplicationPath issue with JAX-RS
> -----------------------------------------
>                 Key: CXF-5702
>                 URL:
>             Project: CXF
>          Issue Type: Bug
>          Components: JAX-RS
>    Affects Versions: 3.0.0-milestone2
>         Environment: Windows
>            Reporter: Kou, Zhi Qiang
>            Assignee: Sergey Beryozkin
>            Priority: Minor
>             Fix For: 3.0.0
> It seems CXF JAX-RS implementation has something wrong with the relationship between
defined servlet-mapping and the value of ApplicationPath annotation.
> From JSR-339 spec, section 2.3.2: If the Application subclass is annotated with @ApplicationPath,
implementations are REQUIRED to use the value of this annotation appended with ”/*” to
define a mapping for the added server. Otherwise, the application MUST be packaged with a
web.xml that specifies a servlet mapping.
> Also from ApplicationPath javadoc:
> Identifies the application path that serves as the base URI for all resource URIs provided
by Path. May only be applied to a subclass of Application. *When published in a Servlet container,
the value of the application path may be overridden using a servlet-mapping element in the
> From above information, if both servlet-mapping in web.xml and ApplicationPath has value,
only one of them should be used as the base URI, and it should be the value of servlet-mapping
in web.xml.
> In my application, my web.xml looks like below. There are two servlet defined, each for
one jaxrs application. And the servlet-mapping values are defined as "/first/" and "/second/".
> {quote}
> 	<servlet>
> 		<servlet-name>rest1</servlet-name>
> 		<servlet-class>org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet</servlet-class>
> 		<init-param>
> 			<param-name></param-name>
> 			<param-value></param-value>
> 		</init-param>
> 	</servlet>
> 	<servlet>
> 		<servlet-name>rest2</servlet-name>
> 		<servlet-class>org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet</servlet-class>
> 		<init-param>
> 			<param-name></param-name>
> 			<param-value></param-value>
> 		</init-param>
> 	</servlet>
> 	<servlet-mapping>
> 		<servlet-name>rest1</servlet-name>
> 		<url-pattern>/first/*</url-pattern>
> 	</servlet-mapping>
> 	<servlet-mapping>
> 		<servlet-name>rest2</servlet-name>
> 		<url-pattern>/second/*</url-pattern>
> 	</servlet-mapping>
> {quote}
> And in my application classes:
> {quote}
> @ApplicationPath("userdemo")
> public class UserDemoApplication extends {
> @ApplicationPath("groupdemo")
> public class GroupDemoApplication extends {
> {quote}
> So in this case according to spec and javadoc, "/first/" and "/second/" should be used
as the base URI, but not the "userdemo" and "groupdemo" or BOTH.
> But in my CXF application I can only access the resources via URLs:
> http://localhost:9080/SingleParameterCxf/first/userdemo/users/eric
> http://localhost:9080/SingleParameterCxf/second/groupdemo/groups/root
> However if I implement the same application using Jersey RI libs, I can access my resources
via URLs:
> http://localhost:9080/SingleParameterJersey/first/users/eric
> http://localhost:9080/SingleParameterJersey/second/groups/root
> My feeling is Jersey RI implementation is correct behavior according to SPEC and JavaDoc.
Please let me know if my understanding is correct or not.
> Any help is highly appreciated! Thank you!

This message was sent by Atlassian JIRA

View raw message