gpt4 book ai didi

java - XMLStreamWriter异常: Attribute not associated with any element

转载 作者:行者123 更新时间:2023-12-01 12:48:52 25 4
gpt4 key购买 nike

我遇到了这个异常:

javax.xml.stream.XMLStreamException: Attribute not associated with any element
at com.sun.xml.internal.stream.writers.XMLStreamWriterImpl.writeAttribute(Unknown Source)
at de.dhbw.horb.routePlanner.parser.GraphDataParser$2.run(GraphDataParser.java:136)
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)*

来 self 下面的代码。我只是不明白它是从哪里来的。

public void writeEdgeXML() throws XMLStreamException {

final long[] idCount = new long[1];

XMLOutputFactory factory = XMLOutputFactory.newInstance();

try {
final XMLStreamWriter writer = factory
.createXMLStreamWriter(new FileOutputStream(
GraphDataConstants.CONST_XML_EDGE), "UTF-8");

writer.writeStartDocument("UTF-8", "1.0");

while (graphSR.hasNext()) {
if (graphSR.nextStartElement() && graphSR.isWay()) {

final Way nextWay = getWay(null);

Controller.executor.getExecutor().submit(new Runnable() {

@Override
public void run() {

while (nextWay != null && nextWay.hasEdge()) {

try {
idCount[0]++;
Edge e = nextWay.removeFirstEdge();
writer.writeStartElement(GraphDataConstants.CONST_EDGE);
writer.writeAttribute(
GraphDataConstants.CONST_EDGE_ID,
String.valueOf(idCount[0]));
writer.writeEmptyElement(GraphDataConstants.CONST_EDGE_NODE);
writer.writeAttribute(
GraphDataConstants.CONST_EDGE_ID,
String.valueOf(e.getStartNode()
.getID()));
writer.writeAttribute(
GraphDataConstants.CONST_EDGE_LATITUDE,
String.valueOf(e.getStartNode()
.getLatitude()));
writer.writeAttribute(
GraphDataConstants.CONST_EDGE_LONGITUDE,
String.valueOf(e.getStartNode()
.getLongitude()));

writer.writeEndElement();
writer.flush();

} catch (XMLStreamException e) {
e.printStackTrace();
}

}
}
});
}
}

最佳答案

XMLStreamWriter 不是线程安全的。

您正在创建一个 XMLStreamWriter,然后尝试使用它同时在多个线程中写入元素。这根本不能保证有效,如果有效,您创建的元素和属性不一定会达到您预期的位置。我怀疑该错误是由于竞争条件所致

Thread 1             Thread 2
-------- --------
1) emptyElement
2) attribute
3) emptyElement
4) endElement
5) attribute (BANG!)

您需要将所有 XML 写入序列化到单个线程中。

关于java - XMLStreamWriter异常: Attribute not associated with any element,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24412572/

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