我有一个包,其中仅包含 xsd 文件来生成(通过 JAXB)与我们的服务器和客户端应用程序相关的共享类。所以这些类包含 XML 注释。
一个客户端是 Android 应用程序。我还想在此处使用这些类进行 JSON 反序列化,因为我与提供 JSON 的 REST 服务进行通信(使用 Jersey/Jackson http://jackson.codehaus.org/).
我尝试使用Jackson http://jackson.codehaus.org/(版本1.7.2)在Android上是这样的:
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)
谁知道阻止 Jackson 解析注释的技巧。
谢谢
克劳斯
我目前的调查得出以下结果:
的用法DeserializationConfig.Feature.USE_ANNOTATIONS
属性(设置为 false)将导致 JACKSONDeserializerConfig
类使用NopAnnotationIntrospector
。然后将使用此解析类的注释NopAnnotationIntrospector
. The NopAnnotationIntrospector
将返回false
在各个isHandled
请求类上的任何注释 - 事实上在进一步处理中不会使用此注释。
因此,系统仍然“检查”注释,在这种情况下,注释必须位于类路径上。由于 Android 不提供任何 jaxb-api 注释,这会导致NoClassDefFoundError
.
我期望USE_ANNOTATIONS = false
将使 JACKSON 完全忽略任何注释 - 但不幸的是它没有。我现在将使用 Jackson Streaming API 来解析 JSON 字符串,而不是使用 JACKSON 数据绑定功能。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)