我有一个仅包含和xsd文件的软件包,用于生成(通过JAXB)与我们的服务器和客户端应用程序相关的共享类.因此,这些类包含XML批注.
一个客户端是一个Android应用程序.我还想在这里使用这些类进行JsON反序列化,因为我与提供JsON(使用Jersey / Jackson)的REST服务进行通信.
我尝试在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.XmlAccessorType02-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)将使JACKSON DeserializerConfig类使用nopAnnotationIntrospector.然后,将使用此nopAnnotationIntrospector解析类的注释. nopAnnotationIntrospector将在对类的任何注释的每个isHandled请求上返回false-实际上,将不会在进一步处理中使用此注释.
因此-系统仍然“检查”注释-在这种情况下,注释必须位于类路径上.由于AndroID不提供任何jaxb-API注释,因此会导致NoClassDefFoundError.
我期望USE_ANNOTATIONS = false将使JACKSON完全忽略任何注释-但不幸的是,事实并非如此.现在,我将使用Jackson流媒体API来解析JsON字符串,而不是使用JACKSON数据绑定功能.
总结以上是内存溢出为你收集整理的android-在不使用批注的情况下使用Jackson JSON处理器全部内容,希望文章能够帮你解决android-在不使用批注的情况下使用Jackson JSON处理器所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)