【发布时间】:2021-12-11 12:39:57
【问题描述】:
我正在尝试使用 Jackson 反序列化 PMD 的输出。具体来说,我想获取 PMD 以下列形式提供给我的违规列表及其数据:
<pmd-cpd>
<duplication lines="615" tokens="1188">
<file line="126" path="Some\Path\Here"/>
<file line="126" path="Some\Path\Here"/>
<codefragment>
<![CDATA[
SomeCodeFragmentHere
]]>
</codefragment>
</duplication>
MoreDuplications
</pmd-cpd>
我目前有以下类要反序列化:
public class PmdResults {
@JacksonXmlProperty(localName = "duplication")
List<CodeClone> codeClones;
}
public class CodeClone {
public int lines;
public int tokens;
@JacksonXmlProperty(localName = "file")
public List<SourceFile> files;
public CodeClone() { super(); }
public static class SourceFile {
public int line;
public String path;
}
}
目前,Jackson 能够正确反序列化根以及“行”和“令牌”。然而,与其尝试将两个“file”元素反序列化为 SourceFile 对象,它直接查找“line”属性来反序列化这些元素的属性。我也不确定如何让杰克逊忽略“代码片段”元素,因为我实际上并不需要这些信息。我将非常感谢这方面的任何帮助,因为我有点难以理解为什么它能够识别出重复元素应该成为列表中的对象,而不是似乎遵循的文件元素相同的格式。
PS.:我实际上更愿意完全摆脱 PmdResults 类,并直接反序列化 List
【问题讨论】: