我有一个应用程序,该应用程序具有以Jersey和Jackson作为JSON提供程序构建的Web服务,所有这些都在Tomcat应用程序服务器中。
我需要使该应用程序在Wildfly 10上运行,并且一切正常,除了未考虑Jackson批注的Web服务响应之外。从我的阅读中,Wildfly缺省使用Jettison,在较新的版本中使用Jackson2。
首选的解决方案是使RestEasy(来自Wildfly 10)使用Jackson,为此,我尝试排除Jackson2和Jettison并在(META-INF \ jboss-deployment-structure.xml)中对Jackson进行依赖,如下所示:
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
<deployment>
<exclusions>
<module name="org.jboss.resteasy.resteasy-jackson2-provider"/>
<module name="org.jboss.resteasy.resteasy-jettison-provider"/>
</exclusions>
<dependencies>
<module name="org.jboss.resteasy.resteasy-jackson-provider" services="import"/>
</dependencies>
</deployment>
</jboss-deployment-structure>
显然,这还不够,因为它的行为与以前一样。我还应该尝试什么?
更新:
由于我的应用程序在Tomcat(使用Jersey)和Wildfly(使用RestEasy)上都应能正常工作,因此我不能依靠在应用程序内部使用resteasy中的jackson来导入org.codehaus.jackson
。
因此,我这样注册我的应用程序:
import javax.ws.rs.core.Application;
public class RestApplication extends Application
{
@Override
public Set<Class<?>> getClasses() {
Set<Class<?>> classes = new HashSet<Class<?>>();
classes.add(RestObjectMapperProvider.class);
classes.add(GeneratedService.class);
return classes;
}
}
其余对象映射器提供程序:
import javax.ws.rs.ext.ContextResolver;
import javax.ws.rs.ext.Provider;
import org.codehaus.jackson.map.ObjectMapper;
@Provider
public class RestObjectMapperProvider implements ContextResolver<ObjectMapper>
{
private final ObjectMapper objectMapper;
public RestObjectMapperProvider()
{
this.objectMapper = new ObjectMapper();
this.objectMapper.configure(SerializationConfig.Feature.INDENT_OUTPUT, true);
}
@Override
public ObjectMapper getContext(Class<?> type)
{
return this.objectMapper;
}
}
我正在使用Gradle构建我的应用,以下是Jackson依赖项:
compile group: 'org.codehaus.jackson', name: 'jackson-jaxrs', version: '1.9.+'
由于在Tomcat(Jersey)下使用了注释,因此我的猜测是在Wildfly中未考虑到排除项。除了检查响应之外,还有什么方法可以检查考虑了哪个JSON Provider?
解决的办法是将排除项和依赖项放在子部署中,而不是像我所做的那样部署标签。
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
<sub-deployment name="axis.war">
<exclusions>
<module name="org.jboss.resteasy.resteasy-jackson2-provider"/>
<module name="org.jboss.resteasy.resteasy-jettison-provider"/>
</exclusions>
<dependencies>
<module name="org.jboss.resteasy.resteasy-jackson-provider" services="import"/>
</dependencies>
</sub-deployment>
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句