java.lang.ClassNotFoundException: javax.ws.rs.ext.MessageBodyReader в Apache TomEE при попытке использовать Джексона вместо Johnzon в качестве поставщика JSON

Начиная с моей первоначальной проблемы, я понимаю, что мне нужно специально настройте Apache TomEE для использования Jackson в качестве поставщика JSON (вместо Johnzon по умолчанию).

Я импортировал следующее в свой pom.xml

    <dependency>
        <!-- I only need this first one because otherwise it's ommited due to a conflict.... -->
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.9.9</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.jaxrs</groupId>
        <artifactId>jackson-jaxrs-json-provider</artifactId>
        <version>2.9.9</version>
    </dependency>

После этого пробовал несколько способов:

Упоминание поставщика в файле ejb-jar.xml

<pojo-deployment  class-name="jaxrs-application">
    <properties>
        cxf.jaxrs.providers = com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider
    </properties>
</pojo-deployment>

Расширение JacksonJaxbJsonProvider с помощью пользовательского класса и его регистрация:

 @Provider
 @Consumes(MediaType.APPLICATION_JSON)
 @Produces(MediaType.APPLICATION_JSON)
 public class TGJSONProvider extends JacksonJaxbJsonProvider {
 }

Независимо от того, что я делаю (или даже если я ничего не добавляю, у меня одна и та же ПРОБЛЕМА:

2019-05-31 16:11:35 SEVERE org.apache.openejb.observer.ObserverManager$MethodInvocation invoke error invoking org.apache.tomee.webservices.TomeeJaxRsService@12bfd80d
java.lang.NoClassDefFoundError: javax/ws/rs/ext/MessageBodyReader
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
    ...
    ...
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.ClassNotFoundException: javax.ws.rs.ext.MessageBodyReader
    at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 55 more

Что я упускаю/делаю неправильно?

Спасибо.


person Serban    schedule 31.05.2019    source источник
comment
Что такое Johnzon как JSON?   -  person Sambit    schedule 31.05.2019
comment
Johnzon — встроенный поставщик JSON по умолчанию в Apache TomEE. Вместо этого мне нужно использовать Джексона.   -  person Serban    schedule 31.05.2019
comment
Вам необходимо добавить зависимость к JSR311 API.   -  person Michał Ziober    schedule 31.05.2019
comment
@MichałZiober Я думал, что один из них уже давно включен в API Java EE ... Я попробовал то, что вы предложили, но в моих библиотеках оказались гораздо более старые версии некоторых классов, и поэтому с ошибками компиляции в других частях проекта. Я не думаю, что это решение...   -  person Serban    schedule 03.06.2019