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