Is it possible to use jboss-deployment-structure.xml to exclude buggy transitive dependency from module I depend on (and replace it ?)
pragmasoft Oct 24, 2013 4:27 PMIn my Jax-rs application I need to use jackson2 dependency instead of default one, that is include module
'org.jboss.resteasy.resteasy-jackson2-provider' and exclude 'org.jboss.resteasy.resteasy-jackson-provider'
Unfortunately, jackson2 provider module depends on buggy "com.fasterxml.jackson.jaxrs.jackson-jaxrs-json-provider" module
(it misses dependency to "javax.xml.bind.api" module).
This causes following error:
Caused by: java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlElement
at com.fasterxml.jackson.module.jaxb.JaxbAnnotationIntrospector.<init>(JaxbAnnotationIntrospector.java:111)
at com.fasterxml.jackson.module.jaxb.JaxbAnnotationIntrospector.<init>(JaxbAnnotationIntrospector.java:98)
at com.fasterxml.jackson.module.jaxb.JaxbAnnotationIntrospector.<init>(JaxbAnnotationIntrospector.java:90)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) [rt.jar:1.7.0_40]
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) [rt.jar:1.7.0_40]
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) [rt.jar:1.7.0_40]
at java.lang.reflect.Constructor.newInstance(Constructor.java:526) [rt.jar:1.7.0_40]
at java.lang.Class.newInstance(Class.java:374) [rt.jar:1.7.0_40]
at com.fasterxml.jackson.jaxrs.json.JsonMapperConfigurator._resolveIntrospector(JsonMapperConfigurator.java:111)
at com.fasterxml.jackson.jaxrs.json.JsonMapperConfigurator._resolveIntrospectors(JsonMapperConfigurator.java:84)
at com.fasterxml.jackson.jaxrs.cfg.MapperConfiguratorBase._setAnnotations(MapperConfiguratorBase.java:120)
at com.fasterxml.jackson.jaxrs.json.JsonMapperConfigurator.getDefaultMapper(JsonMapperConfigurator.java:45)
at com.fasterxml.jackson.jaxrs.base.ProviderBase.locateMapper(ProviderBase.java:710)
at org.jboss.resteasy.plugins.providers.jackson.ResteasyJackson2Provider.readFrom(ResteasyJackson2Provider.java:106) [resteasy-jackson2-provider-3.0.4.Final.jar:]
I'm curious, if it is possible to solve this problem just with jboss-deployment-structure.xml, ie redefine buggy module with correctly set dependencies ?
I tried to exclude buggy module, like this:
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
<sub-deployment name="readytech-server.war">
<dependencies>
<module name="io.undertow.servlet" />
<module name="org.jboss.resteasy.resteasy-jackson2-provider" services="import" />
</dependencies>
<exclusions>
<module name="org.jboss.resteasy.resteasy-jackson-provider" />
<module name="com.fasterxml.jackson.jaxrs.jackson-jaxrs-json-provider" />
</exclusions>
</sub-deployment>
</jboss-deployment-structure>
but this seems does not have effect, the same error happens, this means, exclusions aren't transitive, that is, I cannot achieve that resteasy-jackson2-provider no more used jackson-jaxrs-json-provider.
Do I understand this right and is there still any working solution (besides patching module definition in wildfly ?)