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 <[email protected]>
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