java – 泽西岛:“找不到语法元素”是什么意思?
发布时间:2020-12-15 00:46:49 所属栏目:Java 来源:网络整理
导读:将Jersey从版本1.15升级到1.17后,它开始记录以下消息: Apr 2,2013 5:13:06 PM com.sun.jersey.server.wadl.generators.AbstractWadlGeneratorGrammarGenerator attachTypesINFO: Couldn't find grammar element for class java.lang.String 产生此类消息的
将Jersey从版本1.15升级到1.17后,它开始记录以下消息:
Apr 2,2013 5:13:06 PM com.sun.jersey.server.wadl.generators.AbstractWadlGeneratorGrammarGenerator attachTypes INFO: Couldn't find grammar element for class java.lang.String 产生此类消息的服务示例: @GET @Path("/bla/{a}") @Produces("application/json") public String doStuff(@PathParam("a") String a) { return a; } 我的第一印象是将此视为错误消息,纯粹基于消息的措辞(“无法找到”).但是,它记录在INFO级别,并且它似乎在实践中没有任何影响,因为所有服务都继续工作. 所以我的问题是这些日志消息是否表明我们配置或使用Jersey的方式存在(潜在)问题.由于以前版本没有发生,我已经检查了发行说明,但没有发现任何相关内容. 解决方法
我也有同样的“信息”消息.我没有设法修复它(还)基本的java类型(Boolean,String …)但是对于我自己的自定义类,如果我添加@XmlRootElement注释和默认的no-param构造函数,消息就会消失.
深入研究泽西源代码我注意到类“WadlGeneratorJAXBGrammarGenerator”的代码如下: Object parameterClassInstance = null; try { Constructor<?> defaultConstructor = type.getDeclaredConstructor(); defaultConstructor.setAccessible(true); parameterClassInstance = defaultConstructor.newInstance(); } catch (InstantiationException ex) { LOGGER.log(Level.FINE,null,ex); } catch (IllegalAccessException ex) { LOGGER.log(Level.FINE,ex); } catch (IllegalArgumentException ex) { LOGGER.log(Level.FINE,ex); } catch (InvocationTargetException ex) { LOGGER.log(Level.FINE,ex); } catch (SecurityException ex) { LOGGER.log(Level.FINE,ex); } catch (NoSuchMethodException ex) { //getting here for Boolean/String and some other primitive data type LOGGER.log(Level.FINE,ex); } if (parameterClassInstance==null) { return null; } 所以基本上没有String,Boolean和其他几个的默认构造函数然后它抛出NoSuchMethodException因此它返回null并记录信息消息. 所以仍然不知道为什么会发生,但在我的情况下解决方案是禁用wadl生成,因为我没有使用它. <init-param> <param-name>com.sun.jersey.config.feature.DisableWADL</param-name> <param-value>true</param-value> </init-param> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |