From 5246612ae4efd39a78c5b7128f70d64449f70d43 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Sat, 8 Feb 2025 19:16:25 -0500 Subject: [PATCH] CXF-9039: Run Jakarta RESTful Web Services 3.1 TCK. Fixing more test failures --- .../cxf/jaxrs/provider/json/JSONProvider.java | 4 ++-- .../provider/jsrjsonb/JsrJsonbProvider.java | 16 +++++++++++----- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/json/JSONProvider.java b/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/json/JSONProvider.java index 55896e93cd5..f7ff20b9995 100644 --- a/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/json/JSONProvider.java +++ b/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/json/JSONProvider.java @@ -81,8 +81,8 @@ import org.codehaus.jettison.mapped.TypeConverter; import org.codehaus.jettison.util.StringIndenter; -@Produces({"application/json", "application/*+json" }) -@Consumes({"application/json", "application/*+json" }) +@Produces({"application/json", "application/*+json", "text/json" /* deprecated */ }) +@Consumes({"application/json", "application/*+json", "text/json"/* deprecated */ }) @Provider public class JSONProvider extends AbstractJAXBProvider { diff --git a/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/jsrjsonb/JsrJsonbProvider.java b/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/jsrjsonb/JsrJsonbProvider.java index fbf3b3218f1..df064752ea5 100644 --- a/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/jsrjsonb/JsrJsonbProvider.java +++ b/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/jsrjsonb/JsrJsonbProvider.java @@ -19,6 +19,7 @@ package org.apache.cxf.jaxrs.provider.jsrjsonb; +import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; @@ -83,8 +84,7 @@ public boolean isWriteable(Class type, Type genericType, Annotation[] annotat return isSupportedMediaType(mediaType) && !OutputStream.class.isAssignableFrom(type) && !Writer.class.isAssignableFrom(type) - && !CharSequence.class.isAssignableFrom(type) - && !Response.class.isAssignableFrom(type) + && !isKnownUnsupportedInOutType(type) && !JAXRSUtils.isStreamingLikeOutType(type, genericType); } @@ -98,11 +98,10 @@ public void writeTo(Object t, Class type, Type genericType, Annotation[] anno @Override public boolean isReadable(Class type, Type genericType, Annotation[] annotations, MediaType mediaType) { return isSupportedMediaType(mediaType) - && !Response.class.isAssignableFrom(type) - && !CharSequence.class.isAssignableFrom(type) + && !isKnownUnsupportedInOutType(type) && !JAXRSUtils.isStreamingLikeOutType(type, genericType); } - + @Override public Object readFrom(Class type, Type genericType, Annotation[] annotations, MediaType mediaType, MultivaluedMap httpHeaders, InputStream entityStream) @@ -143,4 +142,11 @@ private Jsonb jsonbFor(Class type) { return DefaultJsonbSupplier.INSTANCE; } } + + private static boolean isKnownUnsupportedInOutType(Class type) { + return Response.class.isAssignableFrom(type) + || CharSequence.class.isAssignableFrom(type) + || File.class.isAssignableFrom(type) + || byte[].class.isAssignableFrom(type); + } }