[
https://issues.apache.org/jira/browse/CXF-5702?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15194330#comment-15194330
]
Jan Cetkovsky commented on CXF-5702:
------------------------------------
<servlet>
<servlet-name>com.example.MyApplication</servlet-name>
<load-on-startup>1</load-on-startup>
<init-param>
<param-name>ignore.application.path</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>com.example.MyApplication</servlet-name>
<url-pattern>/aaa/*</url-pattern>
</servlet-mapping>
@ApplicationPath("/rs/ga/v1")
public class MyApplication extends Application {
REST Application: http://localhost:8080/registry/aaa/rs/ga/v1
-> com.example.MyApplication
doesn't seem to work on the 2.7.x . I am running it on TomEE 1.7.3 and I'm not
explicitly defining it to be CXF servlet, if it makes difference.
> 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)