[ https://issues.apache.org/jira/browse/CXF-5702?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15194302#comment-15194302 ]
Jan Cetkovsky edited comment on CXF-5702 at 3/14/16 10:34 PM: -------------------------------------------------------------- [~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: <servlet> <servlet-name>com.example.MyApplication</servlet-name> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>com.example.MyApplication</servlet-name> <url-pattern>/first</url-pattern> </servlet-mapping> and @ApplicationPath("/second") public class MyApplication extends Application { than the application gets bind to bq. {applicationContext}/first/second while according the spec it should get overriden and be bq. {applicationContext}/first only was (Author: jan.cetkov...@gmail.com): [~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: <servlet> <servlet-name>com.example.MyApplication</servlet-name> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>com.example.MyApplication</servlet-name> <url-pattern>/first</url-pattern> </servlet-mapping> and @ApplicationPath("/second") 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: https://issues.apache.org/jira/browse/CXF-5702 > 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 web.xml.* > https://jsr311.java.net/nonav/javadoc/javax/ws/rs/ApplicationPath.html > 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>javax.ws.rs.Application</param-name> > > <param-value>com.ibm.sample.jaxrs.UserDemoApplication</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>javax.ws.rs.Application</param-name> > > <param-value>com.ibm.sample.jaxrs.GroupDemoApplication</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 javax.ws.rs.core.Application { > @ApplicationPath("groupdemo") > public class GroupDemoApplication extends javax.ws.rs.core.Application { > {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 (v6.3.4#6332)