我有一个基于 Jersey 并在 OSGi 容器 - Geronimo3 中运行的 REST Web 应用程序。该服务使用 Json POST 数据返回结果,并且能够将 json 输出编组到 java 对象。我已经编写了一个 REST 客户端,并且它也适用于获取响应对象的主要方法。
但是,Rest 客户端在一种情况下失败 - 当从 OSGi Web 应用程序中的 Bundle Activator 类调用时。在这种情况下,它会给出以下错误。此外,当 Web 应用程序完全初始化时,Rest 客户端在请求范围内工作正常。我怀疑类加载器存在一些问题,因为 OSGi 类加载是不同的常规 webapps (tomcat)。响应类也使用 @JsonTypeInfo 注释将接口类型映射到具体类。
Caused by: java.lang.IllegalArgumentException: Invalid type id 'com.nnn.IContentValue$ContentText' (for id type 'Id.class'): no such class found
at org.codehaus.jackson.map.jsontype.impl.ClassNameIdResolver.typeFromId(ClassNameIdResolver.java:57)
at org.codehaus.jackson.map.jsontype.impl.TypeDeserializerBase._findDeserializer(TypeDeserializerBase.java:113)
at org.codehaus.jackson.map.jsontype.impl.AsPropertyTypeDeserializer.deserializeTypedFromObject(AsPropertyTypeDeserializer.java:82)
at org.codehaus.jackson.map.deser.AbstractDeserializer.deserializeWithType(AbstractDeserializer.java:52)
at org.codehaus.jackson.map.deser.std.MapDeserializer._readAndBind(MapDeserializer.java:321)
at org.codehaus.jackson.map.deser.std.MapDeserializer.deserialize(MapDeserializer.java:249)
at org.codehaus.jackson.map.deser.std.MapDeserializer.deserialize(MapDeserializer.java:33)
at org.codehaus.jackson.map.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:299)
at org.codehaus.jackson.map.deser.SettableBeanProperty$MethodProperty.deserializeAndSet(SettableBeanProperty.java:414)
at org.codehaus.jackson.map.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:697)