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

dblevins pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tomee.git


The following commit(s) were added to refs/heads/main by this push:
     new 7f375d9a41 TOMEE-4119 TomEEJsonbProvider triggered for */* mime types
7f375d9a41 is described below

commit 7f375d9a41fada563b6569a8db0a719844eaa445
Author: David Blevins <dblev...@tomitribe.com>
AuthorDate: Mon Nov 28 19:07:34 2022 -0800

    TOMEE-4119 TomEEJsonbProvider triggered for */* mime types
    
    Causes the following Jakarta EE 9.1 Web Profile TCK tests to fail:
    
    
com/sun/ts/tests/jaxrs/api/rs/ext/interceptor/reader/readerinterceptorcontext/JAXRSClient#java#proceedThrowsWebApplicationExceptionTest_from_standalone
    
com/sun/ts/tests/jaxrs/ee/rs/core/responsebuilder/JAXRSClient#java#entityObjectTest_from_standalone
    
com/sun/ts/tests/jaxrs/ee/rs/ext/interceptor/containerreader/readerinterceptorcontext/JAXRSClient#java#proceedThrowsWebApplicationExceptionTest_from_standalone
    
com/sun/ts/tests/jaxrs/spec/client/typedentities/JAXRSClient#java#clientAnyWriterUsageTest_from_standalone
    
com/sun/ts/tests/jaxrs/spec/filter/interceptor/JAXRSClient#java#stringBeanReaderContainerInterceptorTest_from_standalone
    
com/sun/ts/tests/jaxrs/spec/filter/interceptor/JAXRSClient#java#stringBeanReaderNoInterceptorTest_from_standalone
    
com/sun/ts/tests/jaxrs/spec/filter/lastvalue/JAXRSClient#java#readerContextOnContainerTest_from_standalone
---
 .../server/cxf/rs/johnzon/TomEEJsonbProvider.java     | 18 +++++++++++++++---
 .../rs/johnzon/TomEEJsonbProviderMediaTypeTest.java   | 19 +++++++++++++++++++
 2 files changed, 34 insertions(+), 3 deletions(-)

diff --git 
a/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/johnzon/TomEEJsonbProvider.java
 
b/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/johnzon/TomEEJsonbProvider.java
index 739d670dad..6593a56c1e 100644
--- 
a/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/johnzon/TomEEJsonbProvider.java
+++ 
b/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/johnzon/TomEEJsonbProvider.java
@@ -16,9 +16,6 @@
  */
 package org.apache.openejb.server.cxf.rs.johnzon;
 
-import org.apache.johnzon.jaxrs.jsonb.jaxrs.JsonbJaxrsProvider;
-import org.apache.johnzon.mapper.access.AccessMode;
-
 import jakarta.activation.DataSource;
 import jakarta.annotation.Priority;
 import jakarta.json.bind.JsonbConfig;
@@ -26,6 +23,9 @@ import jakarta.ws.rs.Consumes;
 import jakarta.ws.rs.Produces;
 import jakarta.ws.rs.core.MediaType;
 import jakarta.ws.rs.ext.Provider;
+import org.apache.johnzon.jaxrs.jsonb.jaxrs.JsonbJaxrsProvider;
+import org.apache.johnzon.mapper.access.AccessMode;
+
 import java.io.File;
 import java.io.Reader;
 import java.lang.annotation.Annotation;
@@ -38,6 +38,7 @@ import java.util.Locale;
 @Consumes({"application/json", "application/*+json"})
 @Priority(value = 5000)
 public class TomEEJsonbProvider<T> extends JsonbJaxrsProvider<T> {
+
     public TomEEJsonbProvider() {
         config.withPropertyVisibilityStrategy(new 
TomEEJsonbPropertyVisibilityStrategy());
         setThrowNoContentExceptionOnEmptyStreams(true); // this is to make TCK 
tests happy
@@ -46,6 +47,8 @@ public class TomEEJsonbProvider<T> extends 
JsonbJaxrsProvider<T> {
 
     @Override
     public boolean isWriteable(Class<?> type, Type genericType, Annotation[] 
annotations, MediaType mediaType) {
+        if (!isJson(mediaType)) return false;
+
         // let the CXF built-in writer handle this one
         // TODO: add a setting?
         if (DataSource.class.isAssignableFrom(type)) return false;
@@ -58,6 +61,8 @@ public class TomEEJsonbProvider<T> extends 
JsonbJaxrsProvider<T> {
 
     @Override
     public boolean isReadable(Class<?> type, Type genericType, Annotation[] 
annotations, MediaType mediaType) {
+        if (!isJson(mediaType)) return false;
+
         // let the CXF built-in writer handle this one
         // TODO: add a setting?
         if (DataSource.class.isAssignableFrom(type)) return false;
@@ -68,6 +73,13 @@ public class TomEEJsonbProvider<T> extends 
JsonbJaxrsProvider<T> {
         return super.isReadable(type, genericType, annotations, mediaType);
     }
 
+    public static boolean isJson(final MediaType mediaType) {
+        if (!mediaType.getType().equals("application")) return false;
+        if (mediaType.getSubtype().equals("json")) return true;
+        if (mediaType.getSubtype().endsWith("+json")) return true;
+        return false;
+    }
+
     public void setDateFormat(String dateFormat) {
         config.setProperty(JsonbConfig.DATE_FORMAT, dateFormat);
     }
diff --git 
a/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/johnzon/TomEEJsonbProviderMediaTypeTest.java
 
b/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/johnzon/TomEEJsonbProviderMediaTypeTest.java
new file mode 100644
index 0000000000..4e64f97dcc
--- /dev/null
+++ 
b/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/johnzon/TomEEJsonbProviderMediaTypeTest.java
@@ -0,0 +1,19 @@
+package org.apache.openejb.server.cxf.rs.johnzon;
+
+import jakarta.ws.rs.core.MediaType;
+import junit.framework.TestCase;
+
+public class TomEEJsonbProviderMediaTypeTest extends TestCase {
+
+    public void testIsJson() {
+
+        // easy scenarios
+        assertTrue(TomEEJsonbProvider.isJson(MediaType.APPLICATION_JSON_TYPE));
+        assertFalse(TomEEJsonbProvider.isJson(MediaType.APPLICATION_XML_TYPE));
+        assertFalse(TomEEJsonbProvider.isJson(MediaType.WILDCARD_TYPE));
+
+        // easy scenarios
+        
assertTrue(TomEEJsonbProvider.isJson(MediaType.APPLICATION_JSON_PATCH_JSON_TYPE));
+        assertTrue(TomEEJsonbProvider.isJson(new MediaType("application", 
"foo+json")));
+    }
+}
\ No newline at end of file

Reply via email to