[英]Jackson 1.8.5 (for JSON) does not deserialize: “no such class found”
我正在使用JSON作為我的RESTful服務,我使用JSON(作為有效載荷載體格式)。
我在接口IntA
上使用@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "class")
。 類SuperClass
實現IntA
。 MyClass
擴展了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)
任何幫助是極大的贊賞。
這聽起來像是一個類路徑問題:也就是說,Jackson代碼找不到帶有類加載器的命名類。 如果可能的話,也許你可以看到傑克遜和價值等級的罐子來自哪里,看看是否可以解釋它。 遺憾的是,類路徑問題在servlet容器部署中非常臭名昭着。
在我的情況下我是如何解決這個問題的(這可能與你的情況完全無關):
ClassLoader oldClassLoader = Thread.currentThread().getContextClassLoader();
Thread.currentThread().setContextClassLoader( classLoader );
try
{
invokeCodeThatPerformsSerializationDeserialization();
}
finally
{
Thread.currentThread().setContextClassLoader( oldClassLoader );
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.