1616
1717package org .glassfish .jersey .client ;
1818
19+ import org .junit .jupiter .api .Assertions ;
1920import org .junit .jupiter .api .Test ;
2021
22+ import javax .ws .rs .Priorities ;
2123import javax .ws .rs .Produces ;
2224import javax .ws .rs .WebApplicationException ;
2325import javax .ws .rs .client .Client ;
4446
4547public class AbortTest {
4648 private static final String TEXT_CSV = "text/csv" ;
49+ private static final String TEXT_HEADER = "text/header" ;
4750 private static final String EXPECTED_CSV = "hello;goodbye\n salutations;farewell" ;
4851 private static final List <List <String >> CSV_LIST = Arrays .asList (
4952 Arrays .asList ("hello" , "goodbye" ),
@@ -77,7 +80,6 @@ public static class CsvWriter implements MessageBodyWriter<List<List<String>>> {
7780
7881 @ Override
7982 public boolean isWriteable (Class <?> type , Type genericType , Annotation [] annotations , MediaType mediaType ) {
80- System .out .println (genericType .getTypeName ());
8183 return List .class .isAssignableFrom (type ) && genericType instanceof ParameterizedType
8284 && ((ParameterizedType ) genericType ).getActualTypeArguments ()[0 ] instanceof ParameterizedType
8385 && String .class .equals (((ParameterizedType ) ((ParameterizedType ) genericType ).getActualTypeArguments ()[0 ])
@@ -99,4 +101,33 @@ public void writeTo(List<List<String>> csvList, Class<?> type, Type genericType,
99101 }
100102 }
101103
104+ @ Test
105+ void testAbortWithMBWWritingHeaders () {
106+ final String entity = "HI" ;
107+ final String header = "CUSTOM_HEADER" ;
108+ try (Response response = ClientBuilder .newClient ().register (new ClientRequestFilter () {
109+ @ Override
110+ public void filter (ClientRequestContext requestContext ) throws IOException {
111+ requestContext .abortWith (Response .ok (entity , TEXT_HEADER ).build ());
112+ }
113+ }).register (new MessageBodyWriter <String >() {
114+
115+ @ Override
116+ public boolean isWriteable (Class <?> type , Type genericType , Annotation [] annotations , MediaType mediaType ) {
117+ return mediaType .toString ().equals (TEXT_HEADER );
118+ }
119+
120+ @ Override
121+ public void writeTo (String s , Class <?> type , Type genericType , Annotation [] annotations , MediaType mediaType ,
122+ MultivaluedMap <String , Object > httpHeaders , OutputStream entityStream ) throws IOException ,
123+ WebApplicationException {
124+ httpHeaders .add (header , entity );
125+ entityStream .write (s .getBytes ());
126+ }
127+ }, Priorities .USER - 1 ).target ("http://localhost:8080" ).request ().get ()) {
128+ Assertions .assertEquals (entity , response .readEntity (String .class ));
129+ Assertions .assertEquals (entity , response .getHeaderString (header ));
130+ }
131+ }
132+
102133}
0 commit comments