public static void handle(String service, MuleMessage responseMessage, BaseMessage request) { BaseMessage reply = null; if (responseMessage.getExceptionPayload() == null) { reply = (BaseMessage) responseMessage.getPayload(); } else { Throwable t = responseMessage.getExceptionPayload().getException(); t = (t.getCause() == null) ? t : t.getCause(); reply = new EucalyptusErrorMessageType(service, request, t.getMessage()); } String corrId = reply.getCorrelationId(); EventRecord.here( EuareReplyQueue.class, EventType.MSG_REPLY, reply.getCorrelationId(), reply.getClass().getSimpleName()) .debug(); try { Context context = Contexts.lookup(corrId); Channel channel = context.getChannel(); Channels.write(channel, reply); Contexts.clear(context); } catch (NoSuchContextException e) { LOG.trace(e, e); } }
public void handle(BaseMessage responseMessage) { EventRecord.here( EuareReplyQueue.class, EventType.MSG_REPLY, responseMessage.getCorrelationId(), responseMessage.getClass().getSimpleName()) .debug(); LOG.debug("HERE: " + responseMessage); String corrId = responseMessage.getCorrelationId(); try { Context context = Contexts.lookup(corrId); Channel channel = context.getChannel(); Channels.write(channel, responseMessage); Contexts.clear(context); } catch (NoSuchContextException e) { LOG.warn("Received a reply for absent client: No channel to write response message.", e); LOG.debug(responseMessage); } }
@Override public void handleUpstream(final ChannelHandlerContext ctx, final ChannelEvent e) throws Exception { final MappingHttpMessage request = MappingHttpMessage.extractMessage(e); final BaseMessage msg = BaseMessage.extractMessage(e); if ((request != null) && (msg != null)) { final User user = Contexts.lookup(request.getCorrelationId()).getUser(); if (user.isSystemAdmin() || ServiceOperations.isUserOperation(msg)) { ctx.sendUpstream(e); } else { Contexts.clear(Contexts.lookup(msg.getCorrelationId())); ctx.getChannel() .write( new MappingHttpResponse( request.getProtocolVersion(), HttpResponseStatus.FORBIDDEN)); } } else { ctx.sendUpstream(e); } }
@Override public void handleUpstream( final ChannelHandlerContext channelHandlerContext, final ChannelEvent channelEvent) throws Exception { if (channelEvent instanceof MessageEvent && componentIdClass != null) { final BaseMessage message = BaseMessage.extractMessage(channelEvent); final ComponentMessage componentMessage = message == null ? null : Ats.inClassHierarchy(message.getClass()).get(ComponentMessage.class); if (message != null && (componentMessage == null || !componentIdClass.equals(componentMessage.value()))) { LOG.warn( String.format( "Message %s does not match pipeline component %s", message.getClass(), componentIdClass.getSimpleName())); final MappingHttpMessage mappingHttpMessage = MappingHttpMessage.extractMessage(channelEvent); final BaseMessage baseMessage = BaseMessage.extractMessage(channelEvent); if (baseMessage != null) { Contexts.clear(Contexts.lookup(baseMessage.getCorrelationId())); } channelHandlerContext .getChannel() .write( new MappingHttpResponse( mappingHttpMessage == null ? HttpVersion.HTTP_1_1 : mappingHttpMessage.getProtocolVersion(), HttpResponseStatus.BAD_REQUEST)); return; } } channelHandlerContext.sendUpstream(channelEvent); }