2017-01-12 4 views
1

У меня есть проблема, как Jackson 2 on Wildfly 10: How to load ProviderBase?Wildfly 10 и Джексон 2

Все dependecies в Maven - при условии,

JBoss развертывания-структуры Правильно ли это?

<deployment> 
    <dependencies> 
     <module name="by.lib" meta-inf="export" export="true"/> 
     <module name="org.jboss.resteasy.resteasy-jackson2-provider" services="import"/> 
     <!--<module name="com.fasterxml.jackson.jaxrs.jackson-jaxrs-json-provider" export="true"/>--> 
     <!--<module name="org.jboss.resteasy.resteasy-jaxrs" export="true"/>--> 
     <!--<module name="com.fasterxml.jackson.core.jackson-databind" export="true"/>--> 
     <!--<module name="com.fasterxml.jackson.core.jackson-core" export="true"/>--> 
     <!--<module name="com.fasterxml.jackson.core.jackson-annotations" export="true"/>--> 
     <!--<module name="org.jboss.resteasy.resteasy-jackson2-provider" export="true"/>--> 
    </dependencies> 
    <exclude-subsystems> 
     <subsystem name="logging"/> 
     <subsystem name="resteasy"/> 
    </exclude-subsystems> 
</deployment> 

В модуле У меня есть dependecies на ДЖЕКСОНА-jaxrs-стружечных-2.8.5

Ловлю различные ошибки

13:10:27,005 ERROR [org.jboss.msc.service.fail] (ServerService Thread Pool -- 59) MSC000001: Failed to start service jboss.undertow.deployment.default-server.default-host./: org.jboss.msc.service.StartException in service jboss.undertow.deployment.default-server.default-host./: com.google.common.util.concurrent.ExecutionError: java.lang.NoClassDefFoundError: Failed to link com/fasterxml/jackson/jaxrs/base/ProviderBase (Module "by.lib:main" from local module loader @1c2c22f3 (finder: local module finder @18e8568 (roots: D:\Work\Server_10.1.0\modules,D:\Work\Server_10.1.0\modules\system\layers\base))): javax/ws/rs/ext/MessageBodyReader 
    at org.wildfly.extension.undertow.deployment.UndertowDeploymentService$1.run(UndertowDeploymentService.java:85) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 
    at org.jboss.threads.JBossThread.run(JBossThread.java:320) 
Caused by: com.google.common.util.concurrent.ExecutionError: java.lang.NoClassDefFoundError: Failed to link com/fasterxml/jackson/jaxrs/base/ProviderBase (Module "by.lib:main" from local module loader @1c2c22f3 (finder: local module finder @18e8568 (roots: D:\Work\Server_10.1.0\modules,D:\Work\Server_10.1.0\modules\system\layers\base))): javax/ws/rs/ext/MessageBodyReader 
    at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2201) 
    at com.google.common.cache.LocalCache.get(LocalCache.java:3937) 

или

13:14:10,114 ERROR [org.jboss.msc.service.fail] (ServerService Thread Pool -- 25) MSC000001: Failed to start service jboss.undertow.deployment.default-server.default-host./: org.jboss.msc.service.StartException in service jboss.undertow.deployment.default-server.default-host./: com.google.common.util.concurrent.ExecutionError: java.lang.NoClassDefFoundError: Failed to link com/fasterxml/jackson/jaxrs/base/ProviderBase (Module "by.lib:main" from local module loader @1c2c22f3 (finder: local module finder @18e8568 (roots: D:\Work\Server_10.1.0\modules,D:\Work\Server_10.1.0\modules\system\layers\base))): javax/ws/rs/ext/MessageBodyReader 
    at org.wildfly.extension.undertow.deployment.UndertowDeploymentService$1.run(UndertowDeploymentService.java:85) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 
    at org.jboss.threads.JBossThread.run(JBossThread.java:320) 
Caused by: com.google.common.util.concurrent.ExecutionError: java.lang.NoClassDefFoundError: Failed to link com/fasterxml/jackson/jaxrs/base/ProviderBase (Module "by.lib:main" from local module loader @1c2c22f3 (finder: local module finder @18e8568 (roots: D:\Work\Server_10.1.0\modules,D:\Work\Server_10.1.0\modules\system\layers\base))): javax/ws/rs/ext/MessageBodyReader 
    at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2201) 
    at com.google.common.cache.LocalCache.get(LocalCache.java:3937) 
    at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3941) 
    at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4824) 

Когда я пытаюсь

@Provider 
@Produces(MediaType.APPLICATION_JSON) 
public class ConfiguredRESTProvider implements ContextResolver<ObjectMapper> { 

    private static ObjectMapper mapper; 

    static { 
     mapper = new ObjectMapper(); 
     AnnotationIntrospector primary = new JacksonAnnotationIntrospector(); 
     AnnotationIntrospector secondary = new JaxbAnnotationIntrospector(mapper.getTypeFactory()); 
     AnnotationIntrospector pair = AnnotationIntrospectorPair.create(primary, secondary); 
     mapper.setAnnotationIntrospector(pair); 

     mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, true); 
     // TODO Разбраться почему не отрабатывае? ("balanceAmount": 2.41E8) 
     mapper.configure(SerializationFeature.WRITE_BIGDECIMAL_AS_PLAIN, true); 
     mapper.configure(JsonGenerator.Feature.WRITE_BIGDECIMAL_AS_PLAIN, true); 
     mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); 
     // mapper.configure(JsonGenerator.Feature.WRITE_NUMBERS_AS_STRINGS,true); 
     mapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY); 
    } 

    // public void ConfiguredRESTProvider() { 
    // // ObjectMapper mapper = new ObjectMapper(); 
    // ObjectMapper mapper = locateMapper(type, json); 
    // ObjectMapper mapper = super._mapperConfig.getDefaultMapper(); 
    // // AnnotationIntrospector primary = new JacksonAnnotationIntrospector(); 
    // // AnnotationIntrospector secondary = new JaxbAnnotationIntrospector(mapper.getTypeFactory()); 
    // // AnnotationIntrospector pair = AnnotationIntrospectorPair.create(primary, secondary); 
    // // mapper.setAnnotationIntrospector(pair); 
    // 
    // mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, true); 
    // // TODO Разбраться почему не отрабатывае? ("balanceAmount": 2.41E8) 
    // mapper.configure(SerializationFeature.WRITE_BIGDECIMAL_AS_PLAIN, true); 
    // mapper.configure(JsonGenerator.Feature.WRITE_BIGDECIMAL_AS_PLAIN, true); 
    // mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); 
    // // mapper.configure(JsonGenerator.Feature.WRITE_NUMBERS_AS_STRINGS,true); 
    // mapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY); 
    // super.setMapper(mapper); 
    // } 

    @Override 
    public ObjectMapper getContext(Class<?> aClass) { 
     return mapper; 
    } 

} 

Jboss Структура

<deployment> 
    <dependencies> 
     <module name="by.lib" meta-inf="export" export="true" services="import"/> 
     <module name="org.jboss.resteasy.resteasy-jackson2-provider" services="import"/> 
     <!--<module name="org.jboss.resteasy.resteasy-jackson2-provider" export="true"/>--> 
     <!--<module name="com.fasterxml.jackson.jaxrs.jackson-jaxrs-json-provider" export="true"/>--> 
     <!--<module name="org.jboss.resteasy.resteasy-jaxrs" export="true"/>--> 
     <!--<module name="com.fasterxml.jackson.core.jackson-databind" export="true"/>--> 
     <!--<module name="com.fasterxml.jackson.core.jackson-core" export="true"/>--> 
     <!--<module name="com.fasterxml.jackson.core.jackson-annotations" export="true"/>--> 
     <!--<module name="org.jboss.resteasy.resteasy-jackson2-provider" export="true"/>--> 
    </dependencies> 
    <exclusions> 
     <module name="org.jboss.resteasy.resteasy-jackson-provider"/> 
     <module name="org.jboss.resteasy.resteasy-jettison-provider"/> 
     <module name="org.jboss.resteasy.resteasy-jackson2-provider"/> 
    </exclusions> 
    <exclude-subsystems> 
     <subsystem name="logging"/> 
     <!--<subsystem name="resteasy"/>--> 
    </exclude-subsystems> 
</deployment> 

У меня есть такая ошибка

2017-01-12 10:59:27,659 ERROR [org.jboss.msc.service.fail] (ServerService Thread Pool -- 93) MSC000001: Failed to start service jboss.undertow.deployment.default-server.default-host./: org.jboss.msc.service.StartException in service jboss.undertow.deployment.default-server.default-host./: java.lang.NoClassDefFoundError: com/fasterxml/jackson/module/jaxb/JaxbAnnotationIntrospector 
    at org.wildfly.extension.undertow.deployment.UndertowDeploymentService$1.run(UndertowDeploymentService.java:85) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 
    at org.jboss.threads.JBossThread.run(JBossThread.java:320) 
Caused by: java.lang.NoClassDefFoundError: com/fasterxml/jackson/module/jaxb/JaxbAnnotationIntrospector 
    at java.lang.Class.getDeclaredConstructors0(Native Method) 
    at java.lang.Class.privateGetDeclaredConstructors(Class.java:2671) 
    at java.lang.Class.getConstructors(Class.java:1651) 
    at org.jboss.resteasy.util.PickConstructor.pickSingletonConstructor(PickConstructor.java:30) 
    at org.jboss.resteasy.spi.ResteasyProviderFactory.createConstructorInjector(ResteasyProviderFactory.java:2252) 
    at org.jboss.resteasy.spi.ResteasyProviderFactory.createProviderInstance(ResteasyProviderFactory.java:2244) 
    at org.jboss.resteasy.spi.ResteasyProviderFactory.addContextResolver(ResteasyProviderFactory.java:1130) 
    at org.jboss.resteasy.spi.ResteasyProviderFactory.registerProvider(ResteasyProviderFactory.java:1667) 
    at org.jboss.resteasy.spi.ResteasyProviderFactory.registerProvider(ResteasyProviderFactory.java:1368) 
    at org.jboss.resteasy.spi.ResteasyProviderFactory.registerProvider(ResteasyProviderFactory.java:1290) 
    at org.jboss.resteasy.spi.ResteasyDeployment.registerProvider(ResteasyDeployment.java:571) 
    at org.jboss.resteasy.spi.ResteasyDeployment.registration(ResteasyDeployment.java:347) 
    at org.jboss.resteasy.spi.ResteasyDeployment.start(ResteasyDeployment.java:250) 
    at org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.init(ServletContainerDispatcher.java:113) 
    at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.init(HttpServletDispatcher.java:36) 
    at io.undertow.servlet.core.LifecyleInterceptorInvocation.proceed(LifecyleInterceptorInvocation. 
+0

На ваш второй попытки вы оба включить и исключить 'org.jboss.resteasy.resteasy-jackson2-provider' модуль. Я не уверен, кто победит там. –

ответ

1

Что касается этого сообщения об ошибке:

java.lang.NoClassDefFoundError: Failed to link 
com/fasterxml/jackson/jaxrs/base/ProviderBase 

или:

java.lang.NoClassDefFoundError: com/fasterxml/jackson/jaxrs/base/ProviderBase 

WildFly не загружается/экспорта всех необходимых библиотек. Ваш JBoss развертывания-structure.xml файл должен выглядеть примерно так:

<deployment> 
    <dependencies> 
    <module name="org.jboss.resteasy.resteasy-jackson2-provider" services="import"/> 
    <!-- This module contain the ProviderBase class: --> 
    <module name="com.fasterxml.jackson.jaxrs.jackson-jaxrs-json-provider" export="true"/> 
    </dependencies> 
    <exclusions> 
    <!-- Just to make sure these modules are not loaded --> 
    <module name="org.jboss.resteasy.resteasy-jackson-provider"/> 
    <module name="org.jboss.resteasy.resteasy-jettison-provider"/> 
    </exclusions> 
</deployment> 
0

NoClassDefFoundError для JaxbAnnotationIntrospector указывает, что модуль jackson-module-jaxb-annotations не определен как зависимость.

Этот модуль содержит класс JaxbAnnotationIntrospector.

Я считаю, что зависимость должна быть добавлена ​​как:

<module name="com.fasterxml.jackson.module.jackson-module-jaxb-annotations"/> 

Указать экспорт в зависимости от обстоятельств.

Смежные вопросы