Bom dia,
Eu tenho um ESB que de tempo em tempo varre um email e verifica se existe algum XML na caixa de entrada.
Se tiver, ele vai salvar no computador. Eu leio ele 2 vezes, ai na segunda da um Stream Closed.
Como estou fazendo:
Passando a mensagem para frente - NFeMailForNfeProcPoller.java:
public void processFile(byte[] msg, String fileName) throws Exception {
InputStream in = null;
try {
in = new BufferedInputStream(new ByteArrayInputStream(msg));
InOnly exchange = getExchangeFactory().createInOnlyExchange();
NormalizedMessage message = exchange.createMessage();
exchange.setInMessage(message);
fileMarshaler.readMessage(exchange, message, in, fileName);
getDeliveryChannel().sendSync(exchange);
} finally {
if (in != null) {
in.close();
}
}
}
Processando - [b]FileWriter.java/b
protected void process(MessageExchange exchange, NormalizedMessage message) throws Exception {
String name = marshaler.getOutputName(exchange, message); //Aqui ele vai pro XMLFileNameExpression
out = new BufferedOutputStream(new FileOutputStream(newFile));
marshaler.writeMessage(exchange, message, out, newFile.getName()); //Aonde da o erro
}
Pegando nome do arquivo - [b]XMLFileNameExpression.java/b
Até aqui beleza, vem o Stream certinho…
public Object evaluate(MessageExchange exchange, NormalizedMessage message) throws MessagingException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
marshaller.writeMessage(exchange, message, baos, null);
//... processo para pegar nome do arquivo
}
Pelo que li no site do apache, só pode ler uma vez o Stream, para ler mais de uma, tem que usar um
StringSource ou BytesSource, só não entendi muito bem como fazer, segue link:
https://cwiki.apache.org/confluence/display/SM/java.io.IOException+-+Stream+closed
Se faltou mais alguma info, só avisar, fico no aguardo, até mais.