0

サーバーおよびクライアントアプリケーションに関連する共有クラスを(JAXBを介して)生成するためのxsdファイルを含むパッケージがあります。したがって、これらのクラスにはXMLアノテーションが含まれています。

1つのクライアントはAndroidアプリです。また、JSONを配信するRESTサービス(Jersey / Jacksonと)と通信するため、ここでこれらのクラスをJSON逆シリアル化に使用したいと思います。

私は次のようにAndroidでJackson(バージョン1.7.2)を使用しようとしています:

ObjectMapper mapper = new ObjectMapper();
mapper = mapper.configure(DeserializationConfig.Feature.USE_ANNOTATIONS,
                false);
mapper = mapper.configure(SerializationConfig.Feature.USE_ANNOTATIONS,
                false);
FooBar someObject = (FooBar) mapper.readValue(jsonString, FooBar.class);

MAPPERを構成すると、注釈の使用を避ける必要がありますが、それでも

02-07 09:30:18.631: ERROR/AndroidRuntime(447): java.lang.NoClassDefFoundError: javax.xml.bind.annotation.XmlAccessorType
02-07 09:30:18.631: ERROR/AndroidRuntime(447):     at java.lang.Class.getDeclaredAnnotations(Native Method)
02-07 09:30:18.631: ERROR/AndroidRuntime(447):     at org.codehaus.jackson.map.introspect.AnnotatedClass.resolveClassAnnotations(AnnotatedClass.java:292)
02-07 09:30:18.631: ERROR/AndroidRuntime(447):     at org.codehaus.jackson.map.introspect.AnnotatedClass.construct(AnnotatedClass.java:139)

ジャクソンが注釈を解決するのを阻止する秘訣を誰が知っていますか。

ありがとうクラウス

4

2 に答える 2

2

私の現在の調査は、これらの結果につながります。

プロパティ (false に設定) を使用するDeserializationConfig.Feature.USE_ANNOTATIONSと、JACKSONDeserializerConfigクラスでNopAnnotationIntrospector. クラスのアノテーションは、 this を使用して解決されますNopAnnotationIntrospector。は、クラスの任意のアノテーションに対する各リクエストでNopAnnotationIntrospector返されます。実際、このアノテーションは以降の処理では使用されません。falseisHandled

そのため、システムは引き続き注釈を「検査」します。この場合、注釈はクラスパス上にある必要があります。Android は jaxb-api アノテーションを提供しないため、NoClassDefFoundError.

JACKSON が注釈を完全に無視するようになると予想USE_ANNOTATIONS = falseしていましたが、残念ながらそうではありません。ここでは、JACKSON データ バインディング機能を使用する代わりに、Jackson Streaming API を使用して JSON 文字列を解析します。

于 2011-02-07T15:12:23.847 に答える
0

価値のあることとして、Jackson トランク (1.8.0 より前) には、注釈処理を完全に無効にしようとするコード変更があります。理論的には、これで問題が解決するはずです。残念なことに、この問題は通常の J2SE JVM では発生せず、Android でのみ発生します。そのため、Android で修正を検証する必要があります。そのため、修正によって問題が完全に解決されているかどうかを Android 開発者に確認してもらうとよいでしょう (そうでない場合は、さらに作業が必要です)。

于 2011-02-17T00:21:53.923 に答える