Jersey를 기반으로하고 OSGi 컨테이너 인 Geronimo3에서 실행되는 REST 웹 애플리케이션이 있습니다. 이 서비스는 Json POST 데이터로 결과를 잘 반환하고 json 출력을 Java 객체로 마샬링 할 수 있습니다. 나는 REST 클라이언트를 작성했으며, 응답 메소드를 다시 얻는 main 메소드로도 잘 동작한다.
그러나 OSGi 웹 응용 프로그램의 번들 활성화 기 클래스에서 호출 한 경우 나머지 클라이언트가 실패합니다. 이 경우 아래에 오류가 표시됩니다. 또한 웹 응용 프로그램이 완전히 초기화 될 때 나머지 클라이언트는 요청 범위에서 정상적으로 작동합니다. 나는 OSGi 클래스 로딩이 다른 정규 webapp (tomcat)이기 때문에 클래스 로더에 대한 몇 가지 문제를 의심하고있다. 또한 응답 클래스는 @JsonTypeInfo 주석을 사용하여 인터페이스 유형을 구체적인 클래스에 매핑합니다.Jackson (저지)이 예외를 역 직렬화합니다 (ID 유형 'Id.class'의 경우). 해당 클래스가 없습니다.
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)