You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by bi...@apache.org on 2011/12/22 03:38:56 UTC
svn commit: r1222009 - in /cxf/trunk:
rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/cors/
systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/cors/
Author: bimargulies
Date: Thu Dec 22 02:38:56 2011
New Revision: 1222009
URL: http://svn.apache.org/viewvc?rev=1222009&view=rev
Log:
CXF-3995: fall back to class-level annotations lacking method-level annotations.
Modified:
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/cors/CrossOriginResourceSharingFilter.java
cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/cors/AnnotatedCorsServer.java
cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/cors/CrossOriginSimpleTest.java
Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/cors/CrossOriginResourceSharingFilter.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/cors/CrossOriginResourceSharingFilter.java?rev=1222009&r1=1222008&r2=1222009&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/cors/CrossOriginResourceSharingFilter.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/cors/CrossOriginResourceSharingFilter.java Thu Dec 22 02:38:56 2011
@@ -96,7 +96,18 @@ public class CrossOriginResourceSharingF
public Response handleRequest(Message m, ClassResourceInfo resourceClass) {
OperationResourceInfo opResInfo = m.getExchange().get(OperationResourceInfo.class);
+ /*
+ * If there is an actual method annotated with @OPTIONS, this is the annotation (if any) from it.
+ * The lookup falls back to it.
+ */
CrossOriginResourceSharing annotation = getAnnotation(opResInfo);
+ /*
+ * If we don't have an annotation on the target method or an @OPTION method, perhaps
+ * we've got one on the class?
+ */
+ if (annotation == null) {
+ annotation = resourceClass.getServiceClass().getAnnotation(CrossOriginResourceSharing.class);
+ }
if ("OPTIONS".equals(m.get(Message.HTTP_REQUEST_METHOD))) {
@@ -196,7 +207,8 @@ public class CrossOriginResourceSharingF
return null;
}
CrossOriginResourceSharing ann = method.getAnnotation(CrossOriginResourceSharing.class);
- ann = ann == null ? optionAnn : ann;
+ ann = ann == null ? optionAnn : ann;
+
if (ann == null) {
return createPreflightResponse(m, false);
}
Modified: cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/cors/AnnotatedCorsServer.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/cors/AnnotatedCorsServer.java?rev=1222009&r1=1222008&r2=1222009&view=diff
==============================================================================
--- cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/cors/AnnotatedCorsServer.java (original)
+++ cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/cors/AnnotatedCorsServer.java Thu Dec 22 02:38:56 2011
@@ -23,6 +23,7 @@ import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.OPTIONS;
+import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
@@ -55,6 +56,14 @@ public class AnnotatedCorsServer {
public String simpleGet(@PathParam("echo") String echo) {
return echo;
}
+
+ @POST
+ @Produces("application/json")
+ @Consumes("application/json")
+ @Path("/unannotatedPost")
+ public Response postSomething() {
+ return Response.ok().build();
+ }
@DELETE
@Path("/delete")
Modified: cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/cors/CrossOriginSimpleTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/cors/CrossOriginSimpleTest.java?rev=1222009&r1=1222008&r2=1222009&view=diff
==============================================================================
--- cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/cors/CrossOriginSimpleTest.java (original)
+++ cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/cors/CrossOriginSimpleTest.java Thu Dec 22 02:38:56 2011
@@ -151,6 +151,31 @@ public class CrossOriginSimpleTest exten
}
@Test
+ public void preflightPostClassAnnotation() throws ClientProtocolException, IOException {
+ HttpClient httpclient = new DefaultHttpClient();
+ HttpOptions httpoptions = new HttpOptions("http://localhost:" + PORT + "/antest/unannotatedPost");
+ httpoptions.addHeader("Origin", "http://in.org");
+ // nonsimple header
+ httpoptions.addHeader("Content-Type", "application/json");
+ httpoptions.addHeader(CorsHeaderConstants.HEADER_AC_REQUEST_METHOD, "POST");
+ httpoptions.addHeader(CorsHeaderConstants.HEADER_AC_REQUEST_HEADERS, "X-custom-1");
+ HttpResponse response = httpclient.execute(httpoptions);
+ assertEquals(200, response.getStatusLine().getStatusCode());
+ }
+
+ @Test
+ public void simplePostClassAnnotation() throws ClientProtocolException, IOException {
+ HttpClient httpclient = new DefaultHttpClient();
+ HttpOptions httpoptions = new HttpOptions("http://localhost:" + PORT + "/antest/unannotatedPost");
+ httpoptions.addHeader("Origin", "http://in.org");
+ // nonsimple header
+ httpoptions.addHeader("Content-Type", "text/plain");
+ httpoptions.addHeader(CorsHeaderConstants.HEADER_AC_REQUEST_METHOD, "POST");
+ HttpResponse response = httpclient.execute(httpoptions);
+ assertEquals(200, response.getStatusLine().getStatusCode());
+ }
+
+ @Test
public void allowStarPassNone() throws Exception {
// allow *, no origin
assertAllOrigin(true, null, null, false);