You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by re...@apache.org on 2022/01/28 19:52:59 UTC

[cxf] branch 3.4.x-fixes updated: Added test case for response entity with annotations (#895)

This is an automated email from the ASF dual-hosted git repository.

reta pushed a commit to branch 3.4.x-fixes
in repository https://gitbox.apache.org/repos/asf/cxf.git


The following commit(s) were added to refs/heads/3.4.x-fixes by this push:
     new cd7fb7b  Added test case for response entity with annotations (#895)
cd7fb7b is described below

commit cd7fb7bf0d0324d6c27f7173c67c85bde8f8ff4a
Author: Andriy Redko <dr...@gmail.com>
AuthorDate: Fri Jan 28 12:52:31 2022 -0500

    Added test case for response entity with annotations (#895)
    
    (cherry picked from commit bc36018b48a2e877432a90bf066deda81156183a)
    (cherry picked from commit 3d4bfc4609a51b5d9f2eb440d648d227c0e8059a)
---
 .../org/apache/cxf/systest/jaxrs/BookServer20.java | 32 ++++++++++++++++++++++
 .../org/apache/cxf/systest/jaxrs/BookStore.java    | 14 ++++++++++
 .../systest/jaxrs/JAXRS20ClientServerBookTest.java | 14 +++++++++-
 3 files changed, 59 insertions(+), 1 deletion(-)

diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookServer20.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookServer20.java
index bda7f19..d9140e9 100644
--- a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookServer20.java
+++ b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookServer20.java
@@ -22,6 +22,7 @@ package org.apache.cxf.systest.jaxrs;
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.OutputStream;
 import java.lang.annotation.Annotation;
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;
@@ -30,10 +31,14 @@ import java.lang.annotation.Target;
 import java.lang.reflect.Method;
 import java.lang.reflect.Type;
 import java.net.URI;
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.GregorianCalendar;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 import javax.annotation.Priority;
 import javax.servlet.http.HttpServletRequest;
@@ -54,9 +59,12 @@ import javax.ws.rs.core.Feature;
 import javax.ws.rs.core.FeatureContext;
 import javax.ws.rs.core.HttpHeaders;
 import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.MultivaluedMap;
 import javax.ws.rs.core.Response;
 import javax.ws.rs.core.UriInfo;
 import javax.ws.rs.ext.ExceptionMapper;
+import javax.ws.rs.ext.MessageBodyWriter;
+import javax.ws.rs.ext.Provider;
 import javax.ws.rs.ext.ReaderInterceptor;
 import javax.ws.rs.ext.ReaderInterceptorContext;
 import javax.ws.rs.ext.WriterInterceptor;
@@ -106,6 +114,7 @@ public class BookServer20 extends AbstractBusTestServerBase {
         providers.add(new ServerTestFeature());
         providers.add(new JacksonJaxbJsonProvider());
         providers.add(new IOExceptionMapper());
+        providers.add(new GregorianCalendarMessageBodyWriter());
         sf.setApplication(new Application());
         sf.setProviders(providers);
         sf.setResourceProvider(BookStore.class,
@@ -558,4 +567,27 @@ public class BookServer20 extends AbstractBusTestServerBase {
         }
 
     }
+    
+    @Provider
+    private class GregorianCalendarMessageBodyWriter implements MessageBodyWriter<GregorianCalendar> {
+        @Override
+        public boolean isWriteable(Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) {
+            return GregorianCalendar.class.equals(type);
+        }
+
+        @Override
+        public void writeTo(GregorianCalendar t, Class<?> type, Type genericType, Annotation[] annotations, 
+                MediaType mediaType, MultivaluedMap<String, Object> httpHeaders, OutputStream entityStream) 
+                    throws IOException, WebApplicationException {
+            // Write in the following format: yyyy-MM-dd{ann1,ann2,...}
+            final String str = new SimpleDateFormat("yyyy-MM-dd").format(t.getTime())
+                + "{"
+                + Arrays
+                    .stream(annotations)
+                    .map(a -> a.annotationType().getName())
+                    .collect(Collectors.joining(","))
+                + "}";
+            entityStream.write(str.getBytes());
+        }
+    }
 }
diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java
index 1810e53..87bd56a 100644
--- a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java
+++ b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java
@@ -82,6 +82,7 @@ import javax.ws.rs.core.UriBuilder;
 import javax.ws.rs.core.UriInfo;
 import javax.ws.rs.ext.MessageBodyReader;
 import javax.ws.rs.ext.MessageBodyWriter;
+import javax.ws.rs.ext.Provider;
 import javax.xml.bind.JAXBElement;
 import javax.xml.bind.annotation.adapters.XmlAdapter;
 import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
@@ -1815,6 +1816,19 @@ public class BookStore {
             .build();
     }
 
+    @GET
+    @Path("/annotated/{bookId}/")
+    @Produces(MediaType.TEXT_PLAIN)
+    public Response getGenericBookDate(@PathParam("bookId") String id) {
+        @Provider
+        @Consumes
+        class AnnotatedClass {
+        }
+        
+        return Response.ok().entity(new GregorianCalendar(2020, 00, 01),
+            AnnotatedClass.class.getAnnotations()).build();
+    }
+    
     public final String init() {
         books.clear();
         cds.clear();
diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRS20ClientServerBookTest.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRS20ClientServerBookTest.java
index 9c105a1..c350f1a 100644
--- a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRS20ClientServerBookTest.java
+++ b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRS20ClientServerBookTest.java
@@ -961,7 +961,19 @@ public class JAXRS20ClientServerBookTest extends AbstractBusClientServerTestBase
         }
     }
 
-
+    @Test
+    public void testGetBookDateAnnotated() throws Exception {
+        final String response = ClientBuilder
+            .newClient()
+            .target("http://localhost:" + PORT + "/bookstore/annotated/123")
+            .request(MediaType.TEXT_PLAIN)
+            .get()
+            .readEntity(String.class);
+            
+        assertThat(response, equalTo("2020-01-01{javax.ws.rs.GET,javax.ws.rs.Path,javax.ws.rs.Produces,"
+            + "javax.ws.rs.ext.Provider,javax.ws.rs.Consumes}"));
+    }
+    
     private static class ReplaceBodyFilter implements ClientRequestFilter {
 
         @Override