获取 java.lang.NoSuchFieldError: RamlValidationService 中的值

Posted

技术标签:

【中文标题】获取 java.lang.NoSuchFieldError: RamlValidationService 中的值【英文标题】:Getting java.lang.NoSuchFieldError: VALUE in RamlValidationService 【发布时间】:2015-11-30 21:22:51 【问题描述】:

我想创建一个 RAML 验证器,它将获得 RAML URLs 返回验证结果。为此我使用raml-java-parser。根据其自述文件,我尝试执行以下代码行:

String sourceUrl = "http://api.apihub.com/onpositive/api/espn-raml-api/espn.raml";
List<ValidationResult> results = RamlValidationService.createDefault().validate(sourceUrl);

并得到以下错误消息:

java.lang.NoSuchFieldError: VALUE

为什么我会收到此错误?在此之前我得到了一些类未找到的异常,因此我手动应用了下面的 jar 库。

> juniversalchardet_1.0.3_1.0.0.jar 
> raml_parser_0.8.11_1.0.0.jar
> rhino_1.7R4_1.0.0.jar 
> snakeyaml-1.16.jar
> jackson_databind_2.4.4_1.0.0.jar

我也尝试过以下内容。 inputStream 是我通过 ByteArrayInputStream 解析出来的 RAML 内容。但是this 不是无效的 RAML,因此我可能做错了什么。

【问题讨论】:

【参考方案1】:

从未见过此错误。我怀疑您可能仍然会错过依赖项。

确实,Java RAML 解析器has more dependencies 比您手动添加的这几个 JAR。你在pom 中看到的依赖关系只是冰山一角,还有大量的传递依赖关系。

所以:为您的项目使用适当的依赖管理器(如 Maven)。它将负责为您带来所有依赖项(直接和传递)。此外,除非这是一个玩具项目,否则无论如何您都需要一个合适的构建工具。

【讨论】:

谢谢@david,可以使用 RAML 的 URL 吗?示例:sourceUrl = "api.apihub.com/onpositive/api/espn-raml-api/espn.raml"; 是的,可以通过 HTTP 加载远程 RAML。

以上是关于获取 java.lang.NoSuchFieldError: RamlValidationService 中的值的主要内容,如果未能解决你的问题,请参考以下文章

iOS ---------- 获取设备的各种信息

java反射获取属性值

Shell 获取路径

iOS 获取文件大小

根据日期字符串获取星期几,日期获取星期,时间获取星期,js获取星期

js如何获取时间点?