Ошибка одновременного изменения при редактировании XML - PullRequest
0 голосов
/ 25 марта 2011

Я получаю ошибку одновременного изменения при редактировании файла XML с использованием Java в файле JSP. Как это вызвано и как я могу решить это?

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");
    }
}

Это трассировка стека:

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)

1 Ответ

0 голосов
/ 25 марта 2011

Я полагаю, вы используете библиотеку 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);         
}
...