У меня есть xmlStream, который я конвертирую в jsonStream, используя org.apache.wink.json4j.utils.XML
. Вот кодОбработка Исключения в потоках трубопровода java
public void process(InputStream xmlStream) {
final BufferedInputStream bufferedXmlStream = new BufferedInputStream(xmlStream);
PipedInputStream pipedJsonInputStream = new PipedInputStream();
final PipedOutputStream jsonStream = new PipedOutputStream(pipedJsonInputStream);
Thread xmlToJsonThread = new Thread(new Runnable() {
@Override
public void run() {
// put your code that writes data to the outputstream here.
try {
XML.toJson(bufferedXmlStream, jsonStream, true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
xmlToJsonThread.setDaemon(true);
xmlToJsonThread.start();
//process data from piped stream
BufferedReader reader = new BufferedReader(new InputStreamReader(
pipedJsonInputStream, StandardCharsets.UTF_8));
try {
// use reader to further process json in main thread...
parseJsonStream(reader);
} finally {
reader.close();
jsonStream.close();
}
}
Когда XML.toJson вызывает исключение, я вижу, что основной поток не выходит. Как мне справиться с этим? Вы, ребята, думаете, что это хороший способ конвертировать поток XML в поток Json для дальнейшей обработки? Я был бы очень признателен за любые предложения. Большое спасибо!
Вы, безусловно, необходимо, чтобы убедиться, что 'jsonStream' закрывается, предпочтительно в' finally' блока. – EJP
EJP, спасибо за это. Исключением является «SAXParseException: сущность« торговля »была указана, но не объявлена». Я могу потенциально изменить xml, чтобы объявить объекты и решить проблему. Но это выявило ошибку в моем коде - когда выбрано исключение, я вижу, что основная программа не выходит. Я уже установил поток в качестве демона, что-нибудь еще, что я должен делать? – user1739372
Да, я закрыл ресурсы. Я обновил код, чтобы показать его – user1739372