Jboss 7.1.1 - Jackson ContextResolver <objectmapper>仅适用于一个部署</objectmapper>

时间:2013-02-06 14:35:27

标签: jackson jax-rs jboss7.x resteasy

我想在Jboss 7.1.1上部署两个休息的webapps。服务器

两个应用程序中的休息请求都会产生并消耗Json。我使用jackson提供程序来序列化和反序列化对象。

现在,我需要为每个webapp配置自定义ObjectMapper。 因此,为了解决这个问题,我添加了实现ContextResolver的@Provider类。每个项目一个。铁。我的一个班级看起来像这样:

@provider
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public class JacksonConfig implements ContextResolver<ObjectMapper> {
   private final ObjectMapper objectMapper;
   public JacksonConfig()
   {
       objectMapper = new ObjectMapper();
       objectMapper.configure(SerializationConfig.Feature.WRAP_ROOT_VALUE, true);
   }
   @Override
   public ObjectMapper getContext(Class<?> objectType) {
       return objectMapper;
   }
}

当我在jboss上只部署其中一个项目时,它运行良好。当我尝试部署两者时,只有第一个初始化项目使用定义的objectMapper。其他人从不从ContextResolver类调用getContext方法。我该怎么办?

编辑:!

经过大量的试验,我决定改变将json从杰克逊解析为staxon的方法。我希望至少这种方法能够很好地运作。但不是......序列化在两个部署的应用程序上都能完美运行但同样,jboss决定在反序列化过程中使用jackson而不是staxon。同样总是在部署之后我首先调用的应用程序运行良好。但第二个使用杰克逊(不知道为什么......)调用异常。总是...

Jboss有什么问题吗?可能我只是做错了什么但我不知道在哪里。任何人都知道我应该在哪里看?

1 个答案:

答案 0 :(得分:4)

看起来我找到了解决这个问题的方法。 它是已知的重新安装问题,可以通过内置选项删除:

要解决这个问题,我只需要在我的项目的web.xml中添加param:

<context-param>
    <param-name>resteasy.use.deployment.sensitive.factory</param-name>
    <param-value>false</param-value>
</context-param>

我在Resteasy jira找到了这个解决方案。对我来说真的很奇怪,任何jboss或resteasy相关文档都没有信息......