Jackson 1.8.5(针对JSON)没有反序列化:“没有找到这样的类”

时间:2012-08-30 17:41:20

标签: java json jackson deserialization

我正在为我的RESTful服务使用JSON,并且我有JSON(作为有效载荷载体格式)。

我在界面@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "class")上使用IntA。类SuperClass实现IntAMyClass扩展了SuperClass

我遇到的问题有点奇怪。当我使用独立的主程序对我的类进行序列化和反序列化时,它完全正常。但是,当我在战争中将它部署在tomcat上并且我尝试反序列化时,它说没有找到这样的类

堆栈跟踪:

Caused by: java.lang.IllegalArgumentException: Invalid type id 'com.abc.xyz.MyClass' (for id type 'Id.class'): no such class found
        at org.codehaus.jackson.map.jsontype.impl.ClassNameIdResolver.typeFromId(ClassNameIdResolver.java:55)
        at org.codehaus.jackson.map.jsontype.impl.TypeDeserializerBase._findDeserializer(TypeDeserializerBase.java:77)
        at org.codehaus.jackson.map.jsontype.impl.AsPropertyTypeDeserializer.deserializeTypedFromObject(AsPropertyTypeDeserializer.java:67)
        at org.codehaus.jackson.map.deser.BeanDeserializer.deserializeWithType(BeanDeserializer.java:423)
        at org.codehaus.jackson.map.deser.StdDeserializerProvider$WrappedDeserializer.deserialize(StdDeserializerProvider.java:460)
        at org.codehaus.jackson.map.ObjectMapper._readValue(ObjectMapper.java:2376)
        at org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1166)
        at org.codehaus.jackson.jaxrs.JacksonJsonProvider.readFrom(JacksonJsonProvider.java:410)
        at org.apache.cxf.jaxrs.client.AbstractClient.readBody(AbstractClient.java:447)

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:7)

这听起来像是一个类路径问题:也就是说,Jackson代码找不到带有类加载器的命名类。如果可能的话,也许你可以看到杰克逊和价值等级的罐子来自哪里,看看是否可以解释它。遗憾的是,类路径问题在servlet容器部署中非常臭名昭着。

答案 1 :(得分:1)

我如何解决这个问题(可能与你的情况完全无关):

    ClassLoader oldClassLoader = Thread.currentThread().getContextClassLoader();
    Thread.currentThread().setContextClassLoader( classLoader );
    try
    {
        invokeCodeThatPerformsSerializationDeserialization();
    }
    finally
    {
        Thread.currentThread().setContextClassLoader( oldClassLoader );
    }