public void route(MessageExchange exchange, NormalizedMessage in, QName service, QName interfaceName, QName operation) throws MessagingException {
if (routed.get() != null) {
throw new IllegalStateException("Drools component has already routed this exchange");
}
routed.set(Boolean.TRUE);
DeliveryChannel channel = getDeliveryChannel();
MessageExchangeFactory factory = channel.createExchangeFactory();
MessageExchange me = factory.createExchange(exchange.getPattern());
me.setInterfaceName(interfaceName);
me.setService(service);
me.setOperation(operation);
NormalizedMessage nm = me.createMessage();
me.setMessage(nm, "in");
getMessageTransformer().transform(exchange, in, nm);
channel.sendSync(me);
if (me.getStatus() == ExchangeStatus.ERROR) {
fail(exchange, me.getError());
} else if (me.getStatus() == ExchangeStatus.DONE) {
done(exchange);
} else {
NormalizedMessage out = me.getMessage("out");
if (out != null) {
nm = exchange.createMessage();
exchange.setMessage(nm, "out");
getMessageTransformer().transform(exchange, out, nm);
} else {
Fault f = me.getFault();
Fault of = exchange.createFault();
exchange.setFault(of);
getMessageTransformer().transform(exchange, f, of);
}
channel.send(exchange);
done(me);
}
}