Я занимаюсь разработкой программы, в которой я получаю XML-файл в виде InputStream. Я должен внести некоторые изменения, а затем вернуть его как OutputStream.
Вот мой код:
public void execute (InputStream xmlEntrada, OutputStream xmlSalida) {
SAXBuilder saxBuilder = new SAXBuilder();
Document document;
String idDocCobro, idCobro;
String sociedad, ejercicio, numDocCobro;
try {
document = saxBuilder.build(xmlEntrada);
Element raiz = document.getRootElement();
List piDocCobros = raiz.getChildren("Pagos");
for (int i = 0; i < piDocCobros.size(); i++) {
Element nodePiDocCobros = (Element) piDocCobros.get(i);
sociedad = nodePiDocCobros.getChildText("Sociedad");
ejercicio = nodePiDocCobros.getChildText("Ejercicio");
numDocCobro = nodePiDocCobros.getChildText("NumDocumentoCobro");
idDocCobro = sociedad + ejercicio + numDocCobro + System.currentTimeMillis();
nodePiDocCobros.getChild("iddoccobro").setText(idDocCobro);
List piCobros = nodePiDocCobros.getChildren("Pago");
for (int y = 0; y < piCobros.size(); y++) {
Element nodePiCobros = (Element) piCobros.get(y);
nodePiCobros.getChild("iddoccobro").setText(idDocCobro);
idCobro = numDocCobro + System.currentTimeMillis();
nodePiCobros.getChild("idcobro").setText(idCobro);
List piDocumentosRel = nodePiCobros.getChild("DocumentosRelacionados").getChildren("DocumentoRelacionado");
for (int z = 0; z < piDocumentosRel.size(); z++) {
Element nodePiDocumentosRel = (Element) piDocumentosRel.get(z);
nodePiDocumentosRel.getChild("idcobro").setText(idCobro);
}
}
}
copy(xmlEntrada, xmlSalida);
} catch (JDOMException | IOException e) {
System.out.println(e.toString());
}
}
public static void copy(InputStream in, OutputStream out) throws IOException {
byte[] buffer = new byte[1024];
while (true) {
int bytesRead = in.read(buffer);
if (bytesRead == -1){
break;
}
out.write(buffer, 0, bytesRead);
}
}
Моя проблема возникает, когда я пытаюсь прочитать XML в функции copy
, потому что поток уже закрыт, поэтому я получаю исключение. Поток закрывается, когда я использую предложение saxBuilder.build
в начале программы. Я не могу сохранить текст ранее в переменной byte[]
, потому что я изменю его во время программы.
Есть идеи?
Заранее большое спасибо! :)