[ https://issues.apache.org/jira/browse/CXF-5702?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14113638#comment-14113638 ]
Sergey Beryozkin edited comment on CXF-5702 at 8/28/14 10:28 AM: ----------------------------------------------------------------- Hi, well, what can we do if the spec API requires that either the explicit servlet pattern or ApplicationPath is used, combining both values now requires setting a servlet init parameter. Can you see the contradiction in the Description of this JIRA, I could not. And CXF needs to be compliant by default. Cheers, Sergey was (Author: sergey_beryozkin): Hi, well, what can we do if the spec API requires that either the explicit servlet pattern or ApplicationPathis used, combining both values now requires setting a servlet init parameter. Can you see the contradiction in the Description of this JIRA, I could not. And CXF needs to be compliant by default. Cheers, Sergey > 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.2#6252)