You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by se...@apache.org on 2015/02/04 18:28:55 UTC

cxf git commit: [CXF-6238] Adding a new ResponseStatus annotation

Repository: cxf
Updated Branches:
  refs/heads/master ad8e4ddff -> 6bf377f6a


[CXF-6238] Adding a new ResponseStatus annotation


Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/6bf377f6
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/6bf377f6
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/6bf377f6

Branch: refs/heads/master
Commit: 6bf377f6afae1172cb5693b32cf4c46bdecde705
Parents: ad8e4dd
Author: Sergey Beryozkin <sb...@talend.com>
Authored: Wed Feb 4 17:28:37 2015 +0000
Committer: Sergey Beryozkin <sb...@talend.com>
Committed: Wed Feb 4 17:28:37 2015 +0000

----------------------------------------------------------------------
 .../apache/cxf/jaxrs/ext/ResponseStatus.java    | 31 ++++++++++++++++++++
 .../cxf/jaxrs/model/wadl/WadlGenerator.java     | 20 +++++++++++--
 .../apache/cxf/jaxrs/model/wadl/BookStore.java  |  3 +-
 .../cxf/jaxrs/model/wadl/WadlGeneratorTest.java |  2 ++
 4 files changed, 53 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cxf/blob/6bf377f6/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/ResponseStatus.java
----------------------------------------------------------------------
diff --git a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/ResponseStatus.java b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/ResponseStatus.java
new file mode 100644
index 0000000..19dd4cc
--- /dev/null
+++ b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/ResponseStatus.java
@@ -0,0 +1,31 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.cxf.jaxrs.ext;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ElementType.METHOD })
+public @interface ResponseStatus {
+    int[] value();
+}
+

http://git-wip-us.apache.org/repos/asf/cxf/blob/6bf377f6/rt/rs/description/src/main/java/org/apache/cxf/jaxrs/model/wadl/WadlGenerator.java
----------------------------------------------------------------------
diff --git a/rt/rs/description/src/main/java/org/apache/cxf/jaxrs/model/wadl/WadlGenerator.java b/rt/rs/description/src/main/java/org/apache/cxf/jaxrs/model/wadl/WadlGenerator.java
index dd86d37..fd0946d 100644
--- a/rt/rs/description/src/main/java/org/apache/cxf/jaxrs/model/wadl/WadlGenerator.java
+++ b/rt/rs/description/src/main/java/org/apache/cxf/jaxrs/model/wadl/WadlGenerator.java
@@ -101,6 +101,7 @@ import org.apache.cxf.helpers.DOMUtils;
 import org.apache.cxf.helpers.IOUtils;
 import org.apache.cxf.jaxrs.JAXRSServiceImpl;
 import org.apache.cxf.jaxrs.ext.Oneway;
+import org.apache.cxf.jaxrs.ext.ResponseStatus;
 import org.apache.cxf.jaxrs.ext.multipart.Multipart;
 import org.apache.cxf.jaxrs.ext.xml.XMLName;
 import org.apache.cxf.jaxrs.ext.xml.XMLSource;
@@ -578,9 +579,12 @@ public class WadlGenerator implements ContainerRequestFilter {
         startMethodResponseTag(sb, ori);
         Class<?> returnType = getMethod(ori).getReturnType();
         boolean isVoid = void.class == returnType;
-        if (isVoid) {
+        ResponseStatus responseStatus = getMethod(ori).getAnnotation(ResponseStatus.class);
+        if (responseStatus != null) {
+            setResponseStatus(sb, responseStatus.value());
+        } else if (isVoid) {
             boolean oneway = getMethod(ori).getAnnotation(Oneway.class) != null;
-            sb.append(" status=\"" + (oneway ? 202 : 204) + "\"");
+            setResponseStatus(sb, oneway ? 202 : 204);
         }
         sb.append(">");
         handleDocs(anns, sb, DocTarget.RESPONSE, false, isJson);
@@ -598,6 +602,18 @@ public class WadlGenerator implements ContainerRequestFilter {
         return resourceTagOpened;
     }
 
+    private void setResponseStatus(StringBuilder sb, int... statuses) {
+        sb.append(" status=\"");
+        for (int i = 0; i < statuses.length; i++) {
+            if (i > 0) {
+                sb.append(" ");
+            }
+            sb.append(statuses[i]);
+        }
+        sb.append("\"");
+        
+    }
+
     protected boolean compareOperations(OperationResourceInfo ori1, OperationResourceInfo ori2) {
         if (ori1 == null || ori2 == null
             || !ori1.getURITemplate().getValue().equals(ori2.getURITemplate().getValue())

http://git-wip-us.apache.org/repos/asf/cxf/blob/6bf377f6/rt/rs/description/src/test/java/org/apache/cxf/jaxrs/model/wadl/BookStore.java
----------------------------------------------------------------------
diff --git a/rt/rs/description/src/test/java/org/apache/cxf/jaxrs/model/wadl/BookStore.java b/rt/rs/description/src/test/java/org/apache/cxf/jaxrs/model/wadl/BookStore.java
index 23304b3..ceb5969 100644
--- a/rt/rs/description/src/test/java/org/apache/cxf/jaxrs/model/wadl/BookStore.java
+++ b/rt/rs/description/src/test/java/org/apache/cxf/jaxrs/model/wadl/BookStore.java
@@ -40,6 +40,7 @@ import javax.ws.rs.core.Response;
 import javax.xml.bind.annotation.XmlTransient;
 
 import org.apache.cxf.aegis.type.java5.IgnoreProperty;
+import org.apache.cxf.jaxrs.ext.ResponseStatus;
 import org.apache.cxf.jaxrs.ext.multipart.MultipartBody;
 import org.apache.cxf.jaxrs.ext.xml.ElementClass;
 import org.apache.cxf.jaxrs.ext.xml.XMLName;
@@ -108,7 +109,7 @@ public class BookStore implements BookDescription {
         @Description(value = "Response", target = DocTarget.RESPONSE),
         @Description(value = "Resource books/{bookid}", target = DocTarget.RESOURCE)
     })
-    
+    @ResponseStatus({201, 200 })
     //CHECKSTYLE:OFF
     @POST
     @Path("books/{bookid}")

http://git-wip-us.apache.org/repos/asf/cxf/blob/6bf377f6/rt/rs/description/src/test/java/org/apache/cxf/jaxrs/model/wadl/WadlGeneratorTest.java
----------------------------------------------------------------------
diff --git a/rt/rs/description/src/test/java/org/apache/cxf/jaxrs/model/wadl/WadlGeneratorTest.java b/rt/rs/description/src/test/java/org/apache/cxf/jaxrs/model/wadl/WadlGeneratorTest.java
index 09dd51b..82c766f 100644
--- a/rt/rs/description/src/test/java/org/apache/cxf/jaxrs/model/wadl/WadlGeneratorTest.java
+++ b/rt/rs/description/src/test/java/org/apache/cxf/jaxrs/model/wadl/WadlGeneratorTest.java
@@ -534,6 +534,8 @@ public class WadlGeneratorTest extends Assert {
         verifyXmlJsonRepresentations(requestEls.get(0), book2El, "InputBook");
         List<Element> responseEls = getElements(methodEls.get(0), "response", 1);
         checkDocs(responseEls.get(0), "", "Response", "");
+        String status = responseEls.get(0).getAttribute("status");
+        assertTrue("201 200".equals(status) || "200 201".equals(status));
         verifyXmlJsonRepresentations(responseEls.get(0), bookEl, "Requested Book");
         
         // PUT