in core/servicemix-core/src/main/java/org/apache/servicemix/components/util/TransformComponentSupport.java [72:142]
protected void processFirstExchange(MessageExchange exchange) {
try {
MessageExchange outExchange = null;
NormalizedMessage in = getInMessage(exchange);
NormalizedMessage out;
if (isInAndOut(exchange)) {
out = exchange.createMessage();
} else {
URI pattern = exchange.getPattern();
outExchange = getExchangeFactory().createExchange(pattern);
outExchange.setProperty(JbiConstants.SENDER_ENDPOINT, getService() + ":" + getEndpoint());
// Set correlations
outExchange.setProperty(correlation, exchange.getExchangeId());
exchange.setProperty(correlation, outExchange.getExchangeId());
String processCorrelationId = (String)exchange.getProperty(JbiConstants.CORRELATION_ID);
if (processCorrelationId != null) {
outExchange.setProperty(JbiConstants.CORRELATION_ID, processCorrelationId);
}
out = outExchange.createMessage();
}
boolean txSync = exchange.isTransacted() && Boolean.TRUE.equals(exchange.getProperty(JbiConstants.SEND_SYNC));
copyPropertiesAndAttachments(exchange, in, out);
if (transform(exchange, in, out)) {
if (isInAndOut(exchange)) {
exchange.setMessage(out, "out");
if (txSync) {
sendSync(exchange);
} else {
send(exchange);
}
} else {
outExchange.setMessage(out, "in");
if (txSync) {
sendSync(outExchange);
if (outExchange.getStatus() == ExchangeStatus.DONE) {
done(exchange);
} else if (outExchange.getStatus() == ExchangeStatus.ERROR) {
fail(exchange, outExchange.getError());
} else if (outExchange.getFault() != null) {
Fault fault = MessageUtil.copyFault(outExchange);
done(outExchange);
MessageUtil.transferToFault(fault, exchange);
sendSync(exchange);
} else {
done(outExchange);
throw new IllegalStateException("Exchange status is " + ExchangeStatus.ACTIVE
+ " but has no Out nor Fault message");
}
} else {
store.store(exchange.getExchangeId(), exchange);
try {
send(outExchange);
} catch (Exception e) {
store.load(exchange.getExchangeId());
throw e;
}
}
}
} else {
exchange.setStatus(ExchangeStatus.DONE);
send(exchange);
}
} catch (Exception e) {
try {
fail(exchange, e);
} catch (Exception e2) {
LOGGER.warn("Unable to handle error: {}", e2.getMessage(), e2);
LOGGER.debug("Original error: {}", e.getMessage(), e);
}
}
}