Java 编辑XML时并发修改错误
在JSP文件中使用Java编辑XML文件时,我遇到了一个并发修改错误。这是如何造成的,我如何解决Java 编辑XML时并发修改错误,java,concurrentmodification,Java,Concurrentmodification,在JSP文件中使用Java编辑XML文件时,我遇到了一个并发修改错误。这是如何造成的,我如何解决 ElementFilter f = new ElementFilter("rurl-link"); Iterator subchilditr = childNode.getDescendants(f); while (subchilditr.hasNext()) { // Exception is thrown here. Element subchild = (Element) subc
ElementFilter f = new ElementFilter("rurl-link");
Iterator subchilditr = childNode.getDescendants(f);
while (subchilditr.hasNext()) { // Exception is thrown here.
Element subchild = (Element) subchilditr.next();
if (subchild.getText().equalsIgnoreCase(prevtext)) {
subchild.setText(link);
out.println("Updated");
}
}
这是stacktrace:
java.util.ConcurrentModificationException
java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372)
java.util.AbstractList$Itr.next(AbstractList.java:343)
org.jdom.DescendantIterator.next(DescendantIterator.java:134)
org.jdom.FilterIterator.hasNext(FilterIterator.java:91)
org.apache.jsp.rurl_005fchangelink_005fxml_jsp._jspService(rurl_005fchangelink_005fxml_jsp.java:101)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:386)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
我相信你正在使用JDOM库?您需要在迭代器循环之外修改
subchild
:
ElementFilter f = new ElementFilter("rurl-link");
Iterator subchilditr = childNode.getDescendants(f);
List<Element> subchildList = new ArrayList<Element>();
while (subchilditr.hasNext()) {
Element subchild = (Element) subchilditr.next();
if (subchild.getText().equalsIgnoreCase(prevtext)) {
subchildList.add(subchild);
}
}
for (Element subchild : subchildList) {
subchild.setText(link);
}
ElementFilter f=新的ElementFilter(“rurl链接”);
迭代器subchilditr=childNode.getsubstands(f);
List subchildList=new ArrayList();
while(subchilditr.hasNext()){
Element subchild=(Element)subchilditr.next();
if(subchild.getText().equalsIgnoreCase(prevtext)){
子儿童列表。添加(子儿童);
}
}
for(元素子子类:子类列表){
子项setText(链接);
}
这还不够信息,我也添加了堆栈跟踪。虽然没有足够的信息可以肯定,但并发修改异常意味着您在迭代该childNode对象时更改了其子代的计数。不建议在迭代这样的序列时修改序列。在JSP文件中而不是在Java类中错误地编写Java代码不会使其成为JSP问题。在普通Java类中执行此操作时,您会遇到完全相同的问题。我删除了JSP标记,因为它与特定问题的原因无关。