gpt4 book ai didi

java - 使用 Apache Digester 时为 "No such accessible method: setFields() on object: java.util.ArrayList"

转载 作者:太空宇宙 更新时间:2023-11-04 08:51:35 24 4
gpt4 key购买 nike

我目前正在尝试使用 Apache Digester 使用某些 XML 中的字符串列表,如 How do I add literal elements to a List object? 中所述。常见问题解答部分。

我遇到了以下错误:

[DEBUG] Digester - [SetNextRule]{job/editorial/articlegroup/article} Call java.util.ArrayList.setFields([This, This, is, is, a, a, test, test, , , , ])
[ERROR] Digester - End event threw exception <java.lang.NoSuchMethodException: No such accessible method: setFields() on object: java.util.ArrayList>java.lang.NoSuchMethodException: No such accessible method: setFields() on object: java.util.ArrayList

我正在使用的 XML 的简化版本如下:

<job>
<editorial>
<articlegroup>
<article>
<text>
<content><![CDATA[This]]></content>
</text>
<text>
<content><![CDATA[is]]></content>
</text>
<text>
<content><![CDATA[a]]></content>
</text>
<text>
<content><![CDATA[test]]></content>
</text>
</article>
</articlegroup>
</editorial>
</job>

以及源代码:

public class PPJob {

List<String> fields;

public List<String> getFields() {
return fields;
}
public void setFields(List<String> fields) {
this.fields = fields;
}
}


addObjectCreate("job", PPJob.class);
addSetProperties("job");

addObjectCreate("job/editorial/articlegroup/article", ArrayList.class);
addCallMethod("job/editorial/articlegroup/article/text/content", "add", 1);
addCallParam("job/editorial/articlegroup/article/text/content", 0);
addSetNext("job/editorial/articlegroup/article", "setFields");

PPJob result = (PPJob)super.parse([THE XML]);

我在使用 Digester 方面几乎是个新手,并且很难找到我需要的示例。

有人能看出我哪里出错了吗?

最佳答案

嗯,这个问题为我赢得了“风滚草”徽章,我正在努力寻找某种方法来重新表述问题,以便更容易理解。这是我的进展更新:

我最终决定放弃 Commons Digester,时间限制使得很难进一步追查问题,因此我没有在 Digester 项目中记录错误(如果其他人确实让我知道,我会分享我的经验)。

事实证明,javax XPath 函数可以更直接地实现我的要求,我决定采用此解决方案:

XPathFactory factory = XPathFactory.newInstance();
XPath xPath = factory.newXPath();
rootQuery = xPath.compile("/job");
textFieldsQuery = xPath.compile("/job/editorial/articlegroup/article/text|/job/editorial/articlegroup/article/flashtext");

Node rootNode = (Node)rootQuery.evaluate(new InputSource(is), XPathConstants.NODE);

PPJob job = new PPJob();
Map<String, String> jobTextFields = new HashMap<String, String>();
NodeList fields = (NodeList)query.evaluate(rootNode, XPathConstants.NODESET);
for (int i = 0; i < fields.getLength(); i++) {
Node field = fields.item(i);
String fieldName = field.getAttributes().getNamedItem("name").getNodeValue();
String fieldContent = field.getNextSibling().getNodeValue();
jobTextFields.put(fieldName, fieldContent);
}
job.setTextFields(jobTextFields);

如果有人对这个问题有建议,我仍然有兴趣听听为什么我在 Digester 上遇到这么多麻烦。

关于java - 使用 Apache Digester 时为 "No such accessible method: setFields() on object: java.util.ArrayList",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3205902/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com