2
アアルト使用して非同期に複数のXML文書の解析に失敗しました:は、これは私が解析しようとしているxmlです<strong>アアルト-XML</strong></p> <p><a href="https://github.com/FasterXML/aalto-xml" rel="nofollow">https://github.com/FasterXML/aalto-xml</a></p> <p>を使用してTCPソケットを出てくる、私はXMLメッセージを解析しようとしている
<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<employee>
<id>1</id>
<name>Alba</name>
<salary>100</salary>
</employee>
最初のxmlメッセージは正常に解析されますが、2番目のxmlメッセージは例外がスローされます。ここ は、私はクラスのメンバを定義する私のクラスで私の解析方法
です:
private AsyncXMLStreamReader<AsyncByteArrayFeeder> parser = new InputFactoryImpl().createAsyncForByteArray();
解析方法:
try {
parser.getInputFeeder().feedInput(buffer, 0, buffer.length);
int type = 0;
//keep looping till event is complete
while(!parser.getInputFeeder().needMoreInput()) {
type = parser.next();
//handle parser event and extract parsed data
switch (type) {
case XMLEvent.START_DOCUMENT:
System.out.println("start document");
break;
case XMLEvent.START_ELEMENT: {
System.out.println("start element: " + parser.getName());
} break;
case XMLEvent.END_ELEMENT: {
System.out.println("end element: " + parser.getName());
} break;
case XMLEvent.END_DOCUMENT: {
System.out.println("end document");
}break;
default:
break;
}
}
if(type == AsyncXMLStreamReader.EVENT_INCOMPLETE) {
System.out.println(results);
}
} catch (XMLStreamException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
例外:
com.fasterxml.aalto.WFCException: Illegal processing instruction target: 'xml' (case insensitive) is reserved by the xml specification
at [row,col {unknown-source}]: [1,112]
任意の助けをいただければ幸いです!
そうかもしれません。 – Shvalb
質問:すべてのxmlについて - 再初期化する必要はありますか?xmlInputFactory.createAsyncForByteArray()?? – Shvalb
ソケットから直接XMLをストリーミングする場合、新しいメッセージごとに新しいAsync ByteArrayを作成する必要があります。そうでなければ、バッファがクリーニングされないように例外がスローされ、次のXML要素タイプを解析しようとすると失敗します。 – Shvalb